Я изучаю 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 будет «унаследован» вместе с любыми другими членами TextBox, к которым RichTextBox имеет доступ?
Кстати, из того, что я прочитал, я предполагаю, что концепция общедоступного, защищенного а частное наследование не существует в C #.
Правильно ли это вывод? Если да, то как можно реализовать такое поведение (т.е. ограничение наследования) в C #?
[Edit]
Уточнение: Раздел в книге, которую я читаю, посвящен тонким различиям и потенциальным подводным камням неявных и явных реализаций интерфейса - так что я понял. Кроме того, фрагмент кода (скопированный из книги) намеренно многословен, чтобы объяснить различную семантику, которая возникает в результате вызова повторно реализованного метода члена, который был неявно реализован в базовом классе (уф!).
My Главный вопрос можно кратко изложить так:
Может ли это:
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?