英語で読む

次の方法で共有


Type.GetField メソッド

定義

現在の Type の特定のフィールドを取得します。

オーバーロード

GetField(String)

指定した名前のパブリック フィールドを検索します。

GetField(String, BindingFlags)

指定したバインディング制約を使用して、指定したフィールドを検索します。

GetField(String)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

指定した名前のパブリック フィールドを検索します。

C#
public System.Reflection.FieldInfo? GetField (string name);
C#
public System.Reflection.FieldInfo GetField (string name);

パラメーター

name
String

取得するデータ フィールドの名前を格納している文字列。

戻り値

指定した名前のパブリック フィールドが存在する場合は、そのフィールドを表すオブジェクト。それ以外の場合は null

実装

例外

namenullです。

この Type オブジェクトは、CreateType() メソッドがまだ呼び出されていない TypeBuilder です。

次の例では、 Type 指定したクラスの オブジェクトを取得し、フィールドの FieldInfo オブジェクトを取得し、フィールドの値を表示します。

C#

using System;
using System.Reflection;

public class MyFieldClassA
{
    public string Field = "A Field";
}

public class MyFieldClassB
{
    private string field = "B Field";
    public string Field
    {
        get
        {
            return field;
        }
        set
        {
            if (field!=value)
            {
                field=value;
            }
        }
    }
}

public class MyFieldInfoClass
{
    public static void Main()
    {
        MyFieldClassB myFieldObjectB = new MyFieldClassB();
        MyFieldClassA myFieldObjectA = new MyFieldClassA();

        Type myTypeA = typeof(MyFieldClassA);
        FieldInfo myFieldInfo = myTypeA.GetField("Field");

        Type myTypeB = typeof(MyFieldClassB);
        FieldInfo myFieldInfo1 = myTypeB.GetField("field",
            BindingFlags.NonPublic | BindingFlags.Instance);

        Console.WriteLine("The value of the public field is: '{0}'",
            myFieldInfo.GetValue(myFieldObjectA));
        Console.WriteLine("The value of the private field is: '{0}'",
            myFieldInfo1.GetValue(myFieldObjectB));
    }
}

注釈

name 検索では、大文字と小文字が区別されます。 検索には、パブリック静的インスタンス フィールドとパブリック インスタンス フィールドが含まれます。

現在 Type の が構築されたジェネリック型を表す場合、このメソッドは 型パラメーターを適切な型引数に置き換えて を返 FieldInfo します。

現在 Type の がジェネリック型またはジェネリック メソッドの定義で型パラメーターを表している場合、このメソッドはクラス制約のフィールドを検索します。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetField(String, BindingFlags)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

指定したバインディング制約を使用して、指定したフィールドを検索します。

C#
public abstract System.Reflection.FieldInfo? GetField (string name, System.Reflection.BindingFlags bindingAttr);
C#
public abstract System.Reflection.FieldInfo GetField (string name, System.Reflection.BindingFlags bindingAttr);

パラメーター

name
String

取得するデータ フィールドの名前を格納している文字列。

bindingAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。

または

null を返す場合は Default

戻り値

指定した要件と一致するフィールドが存在する場合は、そのフィールドを表すオブジェクト。それ以外の場合は null

実装

例外

namenullです。

次の例では、指定したクラスの Type オブジェクトを取得し、指定したバインド フラグに一致するフィールドの オブジェクトを取得 FieldInfo し、フィールドの値を表示します。

C#

using System;
using System.Reflection;

public class MyFieldClassA
{
    public string Field = "A Field";
}

public class MyFieldClassB
{
    private string field = "B Field";
    public string Field
    {
        get
        {
            return field;
        }
        set
        {
            if (field!=value)
            {
                field=value;
            }
        }
    }
}

public class MyFieldInfoClass
{
    public static void Main()
    {
        MyFieldClassB myFieldObjectB = new MyFieldClassB();
        MyFieldClassA myFieldObjectA = new MyFieldClassA();

        Type myTypeA = typeof(MyFieldClassA);
        FieldInfo myFieldInfo = myTypeA.GetField("Field");

        Type myTypeB = typeof(MyFieldClassB);
        FieldInfo myFieldInfo1 = myTypeB.GetField("field",
            BindingFlags.NonPublic | BindingFlags.Instance);

        Console.WriteLine("The value of the public field is: '{0}'",
            myFieldInfo.GetValue(myFieldObjectA));
        Console.WriteLine("The value of the private field is: '{0}'",
            myFieldInfo1.GetValue(myFieldObjectB));
    }
}

注釈

次の表は、型に反映するときに メソッドによって Get 返される基底クラスのメンバーを示しています。

メンバーの型 スタティック 非静的
コンストラクター いいえ いいえ
フィールド いいえ はい。 フィールドは常に名前と署名で非表示になります。
event 適用なし 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。
メソッド いいえ はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。
入れ子になった型 いいえ いいえ
プロパティ 適用なし 一般的な型システムルールは、継承が プロパティを実装するメソッドの継承と同じであるという点です。 リフレクションでは、プロパティは名前と署名による非表示として扱います。 以下の注 2 を参照してください。
  1. 名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。

  2. リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。

  3. カスタム属性は、共通型システムの一部ではありません。

BindingFlags のフィルター フラグを使用して、検索に含めるフィールドを定義できます。

  • 戻り値を取得するには、 または BindingFlags.Static のいずれかをBindingFlags.Instance指定する必要があります。

  • 検索にパブリック フィールドを含めるには、 を指定 BindingFlags.Public します。

  • 非パブリック フィールド (つまり、プライベート、内部、および保護されたフィールド) を検索に含めるには、 を指定 BindingFlags.NonPublic します。

  • を指定BindingFlags.FlattenHierarchyして、階層privateのメンバーとprotected静的メンバーを含publicめます。継承されたクラスの静的メンバーは含まれません。

検索のしくみを変更するには、次 BindingFlags の修飾子フラグを使用できます。

  • BindingFlags.IgnoreCase の大文字と小文字を無視する場合 nameは 。

  • BindingFlags.DeclaredOnly で宣言されている Typeフィールドのみを検索する場合は 。単に継承されたフィールドは検索されません。

詳細については、「System.Reflection.BindingFlags」を参照してください。

現在 Type の が構築されたジェネリック型を表す場合、このメソッドは 型パラメーターを適切な型引数に置き換えて を返 FieldInfo します。

現在 Type の がジェネリック型またはジェネリック メソッドの定義で型パラメーターを表している場合、このメソッドはクラス制約のフィールドを検索します。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1