Czas na teoretyczne pytanie, które właśnie napotkałem.Częściowe przesłonięcie wirtualnej automatycznej właściwości w klasie dziecka
Poniższy kod jest poprawny i kompiluje:
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; }
}
Moje pytanie brzmi:
Dlaczego C# pozwala mi częściowo zastąpić właściwość TestProperty
auto u dziecka, gdy prowadzi to do częściowego nieprzewidywalne zachowanie ? Czy istnieje praktyczna aplikacja?
Mogę ustawić wartość TestProperty za pomocą narzędzia ustawiającego rodzica (sprawdziłem, że generowany jest IL, a program ustawiający nadal ustawia obiekt bazowy w klasie nadrzędnej), chociaż wartość nie jest publicznie dostępna.
Interesujące pytanie! –
Jestem pewien, że istnieje wiele dziwnych rzeczy, które się kompilują i działają, ale nie mają praktycznego zastosowania i potencjalnych brzydkich efektów ubocznych. Młotki budują domy lub rozbijają kciuki w zależności od tego, jak ich używasz :) –
@Dave - Bardzo prawdziwe. Chcę tylko upewnić się, że w tym przypadku rozbijanie kciuków młotkiem nie służy jakimś celom, którego po prostu nie widzę. –