¿Cómo ocultar (eliminar) los métodos de una clase base en C #? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
C #: se pueden ocultar los métodos heredados públicamente (por ejemplo, hacerlos privados a la clase derivada) 10 respuestasLa esencia del problema es, dada una jerarquía de clases como esta:
class A
{
protected void MethodToExpose()
{}
protected void MethodToHide(object param)
{}
}
class B : A
{
new private void MethodToHide(object param)
{}
protected void NewMethodInB()
{}
}
class C : B
{
public void DoSomething()
{
base.MethodToHide("the parameter"); // This still calls A.MethodToHide()
base.MethodToExpose(); // This calls A.MethodToExpose(), but that's ok
base.NewMethodInB();
}
}
¿Cómo puedo evitar que las clases que heredan de la clase "B" vean el método?A.MethodToHide()
? En C ++, esto fue bastante fácil usando una declaración comoclass B : private A
, pero esta sintaxis no es válida en C #.
Para aquellos interesados (o preguntando lo que estoyDe Verdad tratando de hacer), lo que estamos tratando de hacer es crear un contenedor para Rhino.Commons.NHRepository que oculta los métodos que no queremos exponer a nuestro grupo de desarrolladores, para que podamos tener una forma sencilla de Desarrollando nuestra aplicación que los nuevos desarrolladores pueden seguir fácilmente. Así que sí, creo que la prueba "Is-A" es válida para toda la cadena (WidgetRepository Is-A BaseRepository Is-A NHRepository).
Editar: Debería haber mencionado, por el bien del argumento, que la clase A es una clase API fuera de nuestro control. De lo contrario, el problema se vuelve considerablemente más fácil.