System.Type.GetProperty メソッド

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

GetProperty(String) メソッド

検索では name 大文字と小文字が区別されます。 この検索には、パブリック静的プロパティとパブリック インスタンス プロパティが含まれます。

パブリックなアクセサーが少なくとも 1 つ存在する場合、プロパティはリフレクションに対してパブリックと見なされます。 それ以外の場合、プロパティはプライベートと見なされ、(Visual Basic では値を結合してOr) 取得する必要があります | BindingFlags.NonPublicBindingFlags.Instance | BindingFlags.Static

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

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

次のような AmbiguousMatchException 状況が発生します。

  • 型には、同じ名前と異なる数のパラメーターを持つ 2 つのインデックス付きプロパティが含まれています。 あいまいさを解決するには、パラメーター型を指定する GetProperty メソッドのオーバーロードを使用します。
  • 派生型は、(Visual Basic の) 修飾子Shadowsを使用して、同じ名前の継承されたプロパティをnew非表示にするプロパティを宣言します。 あいまいさを解決するには、メソッドのオーバーロードを GetProperty(String, BindingFlags) 使用し、フラグを BindingFlags.DeclaredOnly 追加して、継承されていないメンバーに検索を制限します。

GetProperty(String, BindingFlags) メソッド

パブリックなアクセサーが少なくとも 1 つ存在する場合、プロパティはリフレクションに対してパブリックと見なされます。 それ以外の場合、プロパティはプライベートと見なされ、(Visual Basic では値を結合してOr) 取得する必要があります | BindingFlags.NonPublicBindingFlags.Instance | BindingFlags.Static

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

  • 返品を取得するには、いずれか BindingFlags.InstanceBindingFlags.Static 指定する必要があります。
  • 検索にパブリック プロパティを含める場合に指定 BindingFlags.Public します。
  • 検索に非パブリック プロパティ (プライベート、内部、および保護されたプロパティ) を含むように指定 BindingFlags.NonPublic します。
  • 階層privateに含めるメンバーとprotected静的メンバーを指定BindingFlags.FlattenHierarchypublicします。継承されたクラスの静的メンバーは含まれません。

BindingFlags の修飾子フラグを使用して、検索の動作を変更できます。

  • BindingFlags.IgnoreCase の大文字と小文字 nameを無視します。
  • BindingFlags.DeclaredOnly では、単に継承されたプロパティではなく、 Type上で宣言されたプロパティのみを検索します。

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

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

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

次のような AmbiguousMatchException 状況が発生します。

  • 型には、同じ名前と異なる数のパラメーターを持つ 2 つのインデックス付きプロパティが含まれています。 あいまいさを解決するには、パラメーター型を指定する GetProperty メソッドのオーバーロードを使用します。
  • 派生型は、(Visual Basic の) 修飾子Shadowsを使用して、同じ名前の継承されたプロパティをnew非表示にするプロパティを宣言します。 あいまいさを解決するには、検索を継承されていないメンバーに制限する場合に含めます BindingFlags.DeclaredOnly

GetProperty(System.String,System.リフレクトイオン。BindingFlags、System。リフレクトion。Binder,System.Type,System.Type[],System.リフレクトion。ParameterModifier[])

パブリックなアクセサーが少なくとも 1 つ存在する場合、プロパティはリフレクションに対してパブリックと見なされます。 それ以外の場合、プロパティはプライベートと見なされ、(Visual Basic では値を結合してOr) 取得する必要があります | BindingFlags.NonPublicBindingFlags.Instance | BindingFlags.Static

既定のバインダーは処理 ParameterModifier しませんが ( modifiers パラメーター)、抽象 System.Reflection.Binder クラスを使用して、処理 modifiersを行うカスタム バインダーを記述できます。 ParameterModifier は COM 相互運用機能を介して呼び出すときにのみ使用され、参照渡しのパラメーターのみが処理されます。

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

メンバーの種類 Static 非静的
Constructor いいえ いいえ
フィールド いいえ はい。 フィールドは常に名前と署名で非表示になります。
Event 適用なし 一般的な型システムルールは、継承がプロパティを実装するメソッドの継承と同じであるということです。 リフレクトion では、プロパティは名前と署名による非表示として扱います。2
Method いいえ はい。 メソッド (仮想と非仮想の両方) は、名前で非表示にすることも、名前と署名で非表示にすることもできます。
入れ子になった型 いいえ いいえ
プロパティ 適用なし 一般的な型システムルールは、継承がプロパティを実装するメソッドの継承と同じであるということです。 リフレクトion では、プロパティは名前と署名による非表示として扱います。2

注:

  1. 名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。
  2. リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
  3. カスタム属性は、共通型システムの一部ではありません。

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

  • 返品を取得するには、いずれか BindingFlags.InstanceBindingFlags.Static 指定する必要があります。
  • 検索にパブリック プロパティを含める場合に指定 BindingFlags.Public します。
  • 検索に非パブリック プロパティ (プライベート、内部、および保護されたプロパティ) を含むように指定 BindingFlags.NonPublic します。
  • 階層privateに含めるメンバーとprotected静的メンバーを指定BindingFlags.FlattenHierarchypublicします。継承されたクラスの静的メンバーは含まれません。

BindingFlags の修飾子フラグを使用して、検索の動作を変更できます。

  • BindingFlags.IgnoreCase の大文字と小文字 nameを無視します。
  • BindingFlags.DeclaredOnly では、単に継承されたプロパティではなく、 Type上で宣言されたプロパティのみを検索します。

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

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

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

インデクサーと既定のプロパティ

Visual Basic、C#、および C++ では、インデックス付きプロパティにアクセスするための構文が簡略化され、1 つのインデックス付きプロパティがその型の既定値になります。 たとえば、変数 myList が an ArrayListを参照している場合、構文 myList[3] (myList(3) Visual Basic の場合) は、インデックスが 3 の要素を取得します。 プロパティをオーバーロードできます。

C# では、この機能はインデクサーと呼ばれ、名前で参照することはできません。 既定では、C# インデクサーは、名前が付いたインデックス付き Itemプロパティとしてメタデータに表示されます。 ただし、クラス ライブラリ開発者は、この属性を IndexerNameAttribute 使用してメタデータ内のインデクサーの名前を変更できます。 たとえば、クラスには String インデクサーという名前が付けられています Chars[]。 C# 以外の言語を使用して作成されたインデックス付きプロパティにも、他の Item名前を付けることができます。

型に既定のプロパティがあるかどうかを判断するには、このメソッドを GetCustomAttributes(Type, Boolean) 使用して属性を DefaultMemberAttribute テストします。 型に含まれている場合、プロパティはDefaultMemberAttributeMemberName既定のプロパティの名前を返します。