我性學習的C#(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的從文字框派生,任何人都可以解釋爲什麼RichTextBox中也從IUndoable派生?。我會認爲IUndoable接口將與RichTextBox有權訪問的任何其他TextBox成員「繼承」?另外,我從我迄今爲止讀過的內容中猜測,公共,受保護和私有繼承的概念在C#中不存在。
這是一個正確的推論嗎?如果是這樣,這種行爲(即限制繼承)如何在C#中實現?
[編輯]
澄清:在這本書我讀的部分是關於的細微差別和隱式和顯式接口實現的潛在陷阱 - 所以我明白了。此外,代碼片段(從書中複製)有意爲之,以便解釋由於調用基類中隱式實現的重新實現的成員方法而產生的不同語義(phew!)。
我的主要問題可以簡單地概括爲:
難道這:
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繼承的?
請參閱http://msdn.microsoft.com/en-us/library/ms173153(v=vs.80).aspx瞭解何時使用覆蓋和新關鍵字。 – nickvane 2011-05-18 07:16:54