Я изучаю 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]
Пояснение: раздел в книге, которую я читаю, посвящентонкие различия и потенциальные недостатки неявных и явных реализаций интерфейса - так что я понял.Кроме того, фрагмент кода (скопированный из книги) намеренно многословен, чтобы объяснить различную семантику, которая возникает в результате вызова метода переопределенного члена, который был неявно реализован в базовом классе (фу!).
Мой основной вопрос можно просто сформулировать так:
Может ли это быть:
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?