Tiempo para una pregunta teórica que acabo de encontrar.Anulación parcial de una propiedad de automóvil virtual en una clase infantil
El siguiente código es válido y compila:
public class Parent
{
public virtual object TestProperty { get; set; }
}
public class Child : Parent
{
private string _testValue = "Hello World!";
public override object TestProperty
{
get { return _testValue; }
}
}
public class Consumer
{
Parent p = new Child();
public Consumer(){ p.TestProperty = 3; }
}
Mi pregunta es:
¿Por qué C# me permite invalidar parcialmente la propiedad TestProperty
automático en un niño cuando se lleva a un comportamiento parcialmente impredecible ? ¿Hay alguna aplicación práctica?
Se me permite establecer el valor de TestProperty utilizando el setter padre (comprobé que se generara el IL y el setter todavía está configurando el objeto de respaldo en la clase principal) aunque el público no tenga acceso al valor.
¡Pregunta interesante! –
Estoy seguro de que hay muchas cosas raras como esta que compilarán y funcionarán, pero que no tienen aplicación práctica y posibles efectos secundarios desagradables. Los martillos construyen casas o aplastan pulgares dependiendo de cómo los uses :) –
@Dave - Muy cierto. Solo quiero asegurarme de que, en este caso, romper los pulgares con un martillo no sirve para algo que simplemente no veo. –