我正在学习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#中实现此类行为(即限制继承)?
[编辑]
澄清一下:我正在阅读的书中的部分内容是关于隐式和显式接口实现的微妙差异和潜在陷阱 - 所以我明白了。此外,代码片段(从书中复制)是故意冗长的,以解释调用在基类中隐式实现的重新实现成员方法所产生的不同语义(呼!)。
我的主要问题可以简单地总结为:
这样做可以吗:
public class RichTextBox : TextBox, IUndoable
{
public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }
}
Be written as:
public class RichTextBox : TextBox
{
public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }
}
如果是,为什么作者要这样冗长(我相信他一定有原因)。 如果不是,为什么接口没有从TextBox继承?