【发布时间】:2011-05-18 07:03:20
【问题描述】:
我正在学习 C#(C++ 背景),我遇到了这段代码:
public interface IUndoable { void Undo(); }
public class TextBox : IUndoable
{
void IUndoable.Undo() { Console.WriteLine ("TextBox.Undo"); }
}
public class RichTextBox : TextBox, IUndoable
{
public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }
}
既然 RichTextBox 是从 TextBox 派生的,谁能解释一下为什么 RichTextBox 也是从 IUndoable 派生的?我会认为 IUndoable 接口将与 RichTextBox 有权访问的任何其他 TextBox 成员一起“继承”?
顺便说一句,根据我目前所读到的内容,我猜测 C# 中不存在公共、受保护和私有继承的概念。
这是一个正确的推论吗?如果是这样,这种行为(即限制继承)如何在 C# 中实现?
[编辑]
澄清:我正在阅读的书中的部分是关于隐式和显式接口实现的细微差别和潜在陷阱 - 所以我明白了。此外,代码 sn-p(从书中复制)是故意冗长的,以便解释由于调用在基类中隐式实现的重新实现的成员方法而产生的不同语义(呸!)。
我的主要问题可以简单概括为:
这样可以吗:
public class RichTextBox : TextBox, IUndoable
{
public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }
}
写成:
public class RichTextBox : TextBox
{
public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }
}
如果是的话,为什么作者是冗长的(我确定他一定有原因)。 如果不是,为什么接口不是继承自TextBox?
【问题讨论】:
-
请参阅msdn.microsoft.com/en-us/library/ms173153(v=vs.80).aspx 了解何时使用覆盖和新关键字。
标签: c# inheritance interface