エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Type.GetProperty メソッド (String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

2013/12/12

指定したバインディング制約を使用して、指定した引数の型および修飾子と一致するパラメーターが設定された指定のプロパティを検索します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public PropertyInfo GetProperty(
	string name,
	BindingFlags bindingAttr,
	Binder binder,
	Type returnType,
	Type[] types,
	ParameterModifier[] modifiers
)

パラメーター

name
型: System.String
取得するプロパティの名前を格納している String
bindingAttr
型: System.Reflection.BindingFlags
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビットマスク。
または
null を返す 0。
binder
型: System.Reflection.Binder
一連のプロパティを定義し、バインディングを有効にする Binder オブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバーの呼び出しなどが含まれます。
または
DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing)。
returnType
型: System.Type
プロパティの戻り値の型。
types
型: System.Type []
取得するインデックス付きプロパティに対するパラメーターの数値、順序、および型を表す Type オブジェクトの配列。
または
インデックス付けされていないプロパティを取得するための、Type 型の空の配列 (Type[] types = new Type[0])。
modifiers
型: System.Reflection.ParameterModifier []
types 配列内の対応する要素に関連付けられている属性を表す ParameterModifier オブジェクトの配列。既定のバインダーは、このパラメーターを処理しません。

戻り値

型: System.Reflection.PropertyInfo
指定した要件と一致するプロパティが存在する場合は、そのプロパティを表す PropertyInfo オブジェクト。それ以外の場合は null

実装

IReflect.GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

例外条件
AmbiguousMatchException

指定した名前を持ち、指定したバインディング制約に一致するプロパティが 2 つ以上存在します。

ArgumentNullException

namenull です。

または

typesnull です。

ArgumentException

types が多次元です。

または

modifiers が多次元です。

または

typesmodifiers の長さが異なります。

NullReferenceException

types の要素が null です。

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

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

型に対するリフレクション時に Get メソッドによって返される基本クラスのメンバーを次の表に示します。

メンバー型

静的

非静的

コンストラクター

いいえ

いいえ

フィールド

いいえ

はい。フィールドは常に名前と署名によって隠ぺいされます。

イベント

該当なし

共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。

メソッド

いいえ

はい。メソッド (仮想メソッドと非仮想メソッドの両方) は、名前によって隠ぺいすることも、名前と署名によって隠ぺいすることもできます。

入れ子にされた型

いいえ

いいえ

プロパティ

該当なし

共通型システムの規則では、継承は、プロパティを実装するメソッドの継承と同じになります。リフレクションは、プロパティを名前と署名によって隠ぺいされているとして扱います。下記のメモ 2 を参照してください。

メモ:

  1. 名前と署名による隠ぺいでは、カスタム修飾子、戻り値の型、パラメーターの型、sentinel、およびアンマネージ呼び出し規約を含めて、署名のすべての部分が判断の対象となります。これはバイナリ比較です。

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

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

types 配列と modifiers 配列の長さが同じです。types 配列で指定するパラメーターには、modifiers 配列で指定されている以下の各属性を設定できます。pdIn、pdOut、pdLcid、pdRetval、pdOptional、および pdHasDefault。これらの属性は、それぞれ [In]、[Out]、[lcid]、[retval]、[optional]、およびパラメーターが既定値を持つかどうかを指定する値を表します。パラメーターに関連付けられた属性はメタデータに格納され、相互運用性を拡張します。

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

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

  • 検索対象にパブリック プロパティを含めるための BindingFlags.Public を指定します。

  • 検索対象にパブリックではないプロパティ (つまり、プライベート プロパティやプロテクト プロパティ) を含めるための BindingFlags.NonPublic を指定します。

  • 階層構造の上位にある public 静的メンバーおよび protected 静的メンバーを検索対象に含めるには、BindingFlags.FlattenHierarchy を指定します。継承クラスの private 静的メンバーは含まれません。

次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。

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

  • 単に継承されただけのプロパティではなく、Type で宣言されたプロパティだけを検索する場合は BindingFlags.DeclaredOnly

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

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

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

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

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

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

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

バージョンについてのメモ

Windows Phone

typesnull 要素が含まれている場合は、GetProperty が、ArgumentNullException の代わりに NullReferenceException をスローします。

Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2014 Microsoft