Интерфейс 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 является производным от 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?

5
задан Brian Rasmussen 5 June 2011 в 08:06
поделиться