簡単な回答:はい、Child
すべてのBase
クラス フィールドを割り当てるため、バッキング フィールドはまだ割り当てられています。Base.MyInt
ただし、プロパティ以外の方法でアクセスすることはできません
長い答え:
クイック分解結果。
Base
およびChild
クラスの実装:
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; }
}
}
ご覧のとおり、バッキング フィールドはBase
クラス内に存在します。Child
ただし、プライベートであるため、クラスからアクセスすることはできません。
.field private int32 '<MyInt>k__BackingField'
そして、あなたのChild.MyInt
プロパティはそのフィールドを使用しません。プロパティ IL は次のとおりです。
.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
ご想像のとおり、 usesanotherInt
フィールドです。
(プロパティ'<MyInt>k__BackingField'
を介して間接的に)にアクセスする唯一の方法は次のとおりです。Base.MyInt