tengo el siguiente código:¿Debería una propiedad protegida en una clase secundaria C# ocultar el acceso a una propiedad pública en el elemento primario?
public class Parent
{
public string MyField { get; set; }
}
public class Child : Parent
{
protected new int MyField { get; set; }
}
Trato de acceder a este con:
static void Main(string[] args)
{
Child child = new Child();
child.MyField = "something";
}
Visual Studio 2008 compila esto sin comentario, pero bajo Mono (2.4.2, Ubuntu) consigo el mensaje de error
'HideTest.Child.MyField' is inaccessible due to its protection level (CS0122)
¿Hay una implementación u otra que cumpla más con el estándar aquí?
Edit: Gracias a todas las personas que han señalado el mal diseño. Lamentablemente, es una biblioteca de terceros y cambiarla significativamente no es práctico.
¿Esto realmente tiene algo que ver con la herencia? Ubuntu funciona con cualquier campo protegido en la clase Child? –
Antes de responder, ¿puede explicarme cómo una propiedad puede ser pública en la clase de padres y protegida en la clase de niños? Usted tiene un serio problema de diseño, creo. –
usando 'nuevo' es un error que debe evitarse, especialmente cuando tiene el control de la fuente para ambas clases. Y lo que intenta hacer, es decir, cubrir una propiedad heredada con un tipo diferente, huele realmente mal. el pescado podrido apesta, incluso. ;-) Deberías echar un vistazo a lo que intentas lograr y encontrar una manera limpia de hacerlo. La formación de malos hábitos como este temprano en la vida dará lugar a ataques de psoriasis y ansiedad. –