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.Instance
をBindingFlags.Static
指定する必要があります。 - 検索にパブリック プロパティを含める場合に指定
BindingFlags.Public
します。 - 検索に非パブリック プロパティ (プライベート、内部、および保護されたプロパティ) を含むように指定
BindingFlags.NonPublic
します。 - 階層
private
に含めるメンバーとprotected
静的メンバーを指定BindingFlags.FlattenHierarchy
public
します。継承されたクラスの静的メンバーは含まれません。
次 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 |
注:
- 名前と署名による非表示は、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分を考慮します。 これはバイナリ比較です。
- リフレクションの場合、プロパティとイベントは名前と署名によって非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーしかない場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。
- カスタム属性は、共通型システムの一部ではありません。
次 BindingFlags のフィルター フラグを使用して、検索に含めるプロパティを定義できます。
- 返品を取得するには、いずれか
BindingFlags.Instance
をBindingFlags.Static
指定する必要があります。 - 検索にパブリック プロパティを含める場合に指定
BindingFlags.Public
します。 - 検索に非パブリック プロパティ (プライベート、内部、および保護されたプロパティ) を含むように指定
BindingFlags.NonPublic
します。 - 階層
private
に含めるメンバーとprotected
静的メンバーを指定BindingFlags.FlattenHierarchy
public
します。継承されたクラスの静的メンバーは含まれません。
次 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既定のプロパティの名前を返します。
.NET