Réponse courte: Oui, l' Child
alloue tous Base
champs de la classe, donc il a encore le champ de stockage alloué. Cependant, vous ne pouvez pas y accéder autrement que par Base.MyInt
de la propriété.
Réponse Longue:
Rapide démontage des résultats.
Base
et Child
des classes de mise en œuvre:
public class Base
{
public virtual int MyInt { get; set; }
}
public class Child : Base
{
private int anotherInt;
public override int MyInt
{
get { return anotherInt; }
set { anotherInt = value; }
}
}
Comme vous pouvez le voir, le champ de stockage existe au sein de l' Base
classe. Cependant, il est privé, donc vous ne pouvez pas y accéder à partir d' Child
classe:
.field private int32 '<MyInt>k__BackingField'
Et votre Child.MyInt
de la propriété de ne pas utiliser ce champ. La propriété IL est:
.method public hidebysig specialname virtual
instance int32 get_MyInt () cil managed
{
// Method begins at RVA 0x2109
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldfld int32 ConsoleApplication2.Child::anotherInt
IL_0006: ret
} // end of method Child::get_MyInt
.method public hidebysig specialname virtual
instance void set_MyInt (
int32 'value'
) cil managed
{
// Method begins at RVA 0x2111
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: stfld int32 ConsoleApplication2.Child::anotherInt
IL_0007: ret
} // end of method Child::set_MyInt
Est utilise anotherInt
champ, que l'on pourrait attendre.
Les seuls moyens d'accéder à l' '<MyInt>k__BackingField'
(indirectement, par le biais Base.MyInt
de la propriété) sont:
-
base.MyInt
de dans les Child
classe