私たちはC#でプロパティを使用する場合、コンパイラは常にMSIL(すなわち、get_PropertyNameとset_PropertyName)でそれらのgetterとsetterを生成することを知って、例えば、次のコードを考えてみます。C#のプロパティには、常に「バックグラウンド」のバックアップフィールドがありますか?
class Program
{
class Test
{
public string Name { get; set; }
}
static void Main(string[] args)
{
//Here I'm using reflection to inspect methods of Test class
Type type = typeof(Test);
foreach (var item in type.GetMethods())
{
Console.WriteLine(item.Name);
}
}
}
このプログラムTest
の方法で出力を生成します。その中には、get_Name
とset_Name
があります。これは私が言っていたゲッターとセッターです。 gettersとsetterが "舞台裏で"作成された場合、ゲッターとセッターが取得/設定する値を取得するバックアップフィールドも作成する必要があります。 ので、前の例から、私はそのように、Testクラスのフィールドを検査するためにリフレクションを使用することができます。
static void Main(string[] args)
{
Type type = typeof(Test);
foreach (var item in type.GetFields())
{
Console.WriteLine(item.Name);
}
}
このプログラムの出力に含まは空で、私が作成されたバックアップフィールドはprivate
を持っているためであると仮定アクセスできないので見えません。しかし、私はそれをチェックする方法がわからないので、バックアップフィールドが常に作成された場合にお知らせください(get;
とという単純なプロパティを持っていても)。
私が知っている限り、彼らはそうしています。 – Alex
他の参考資料も簡単に見つけることができます。これらは通常、バックアップフィールドではなく、*バッキング*フィールドとして知られています。 –
C#のそれ以降のバージョンで追加された機能が、主な用途を隠してしまったことは面白いです。 – IllidanS4