estoy learing C# (C++ fondo), y he venido al otro lado de esta pieza de código:C# interfaz y la herencia pregunta
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"); }
}
Desde RichTextBox deriva del cuadro de texto, puede alguien explicar por qué RichTextBox también se deriven de los IUndoable ?. Hubiera pensado que la interfaz IUndoable se "heredará junto" con cualquier otro miembro de TextBox al que RichTextBox tenga acceso.
Como un lado, estoy adivinando por lo que he leído hasta ahora, que el concepto de herencia pública, protegida y privada no existe en C#.
¿Es esto una inferencia correcta ?. Si es así, ¿cómo se puede implementar dicho comportamiento (es decir, restringir la herencia) en C#?
[Editar]
Aclaración: La sección en el libro que estoy leyendo es acerca de las diferencias sutiles y potenciales trampas de implementaciones de interfaz implícitos y explícitos - por lo que entiendo. Además, el fragmento de código (copiado del libro) es intencionalmente detallado, para explicar la semántica diferente que surge como resultado de invocar un método de miembro reimplementado que se implementó implícitamente en la clase base (¡phew!).
Mi pregunta principal simplemente se puede resumir como:
Podría esto:
public class RichTextBox : TextBox, IUndoable
{
public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }
}
escribirse como:
public class RichTextBox : TextBox
{
public new void Undo() { Console.WriteLine ("RichTextBox.Undo"); }
}
Y si es así, ¿por qué ser el autor prolijo (él debe tener una razón por la que estoy seguro). Si no, ¿por qué la interfaz no se hereda de TextBox?
Ver http://msdn.microsoft.com/en-us/library/ms173153(v=vs.80).aspx para saber cuándo usar override y nuevas palabras clave. – nickvane