Temps pour une question théorique que je viens de parcourir.Substitution partielle d'une propriété Auto virtuelle dans une classe enfant
Le code suivant est valide et compile:
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; }
}
Ma question est:
Pourquoi C# me permet de passer outre partiellement la propriété auto TestProperty
chez un enfant quand il conduit à un comportement partiellement imprévisible ? Existe-t-il une application pratique?
Je suis autorisé à définir la valeur de TestProperty en utilisant le setter du parent (j'ai vérifié que l'IL est généré et que le setter définit toujours l'objet de sauvegarde dans la classe parente) même si value n'est pas accessible au public.
Question intéressante! –
Je suis sûr qu'il y a beaucoup de choses bizarres comme celle-ci qui vont compiler et fonctionner, mais n'ont aucune application pratique et potentiellement des effets secondaires laids. Les marteaux construisent des maisons ou écrasent des pouces selon la façon dont vous les utilisez :) –
@Dave - Très vrai. Je veux juste m'assurer que, dans ce cas, briser mes pouces avec un marteau ne sert pas un but que je ne vois pas. –