referencia propiedad and c# inheritance theory

c# - and - Anular parcialmente una propiedad virtual virtual en una clase secundaria



virtual and override c# (2)

Este comportamiento es consistente con las propiedades no implementadas automáticamente en C #. Siempre ha sido posible anular solo un método get o set para una propiedad virtual. Por lo tanto, hacer que sea imposible hacerlo con una propiedad implementada automáticamente crearía una inconsistencia innecesaria.

Por ejemplo, lo siguiente es legal.

class A { public virtual int P1 { get { return 42; } set { } } } class B : A { public override int P1 { get { return 18; } } }

Tiempo para una pregunta teórica que acabo de encontrar.

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 anular parcialmente la propiedad automática TestProperty en un niño cuando conduce a un comportamiento parcialmente impredecible? ¿Hay alguna aplicación práctica?

Se me permite establecer el valor de TestProperty utilizando el configurador principal (verifiqué la IL que se está generando y el establecedor aún está configurando el objeto de respaldo en la clase principal) aunque el valor no sea accesible al público.


Sin embargo, ¿no tiene sentido para un setter? Si solo anula parcialmente el establecedor, eso podría ser útil para que pueda responder a ese evento, además de llamar a la base.TestProperty = value , sin tener que molestarse con una anulación de calderilla del getter también.