ジェネリックとリフレクション

共通言語ランタイム (CLR) は実行時にジェネリック型の情報にアクセスできるため、非ジェネリック型の場合と同じように、リフレクションを使用してジェネリック型の情報を取得できます。 詳細については、「ランタイムのジェネリック」を参照してください。

System.Reflection.Emit 名前空間にも、ジェネリックをサポートする新しいメンバーが追加されています。 「方法:リフレクション出力を使用してジェネリック型を定義する」をご覧ください。

ジェネリック リフレクションで使用する用語に関する不変条件のリストについては、IsGenericType プロパティの解説を参照してください。

  • IsGenericType: 型がジェネリックである場合に true が返されます。
  • GetGenericArguments: 構築された型に対して指定された型引数、またはジェネリック型定義の型パラメーターを表す Type オブジェクトの配列が返されます。
  • GetGenericTypeDefinition: 現在構築されている型の基になるジェネリック型定義が返されます。
  • GetGenericParameterConstraints: 現在のジェネリック型パラメーターの制約を表す Type オブジェクトの配列が返されます。
  • ContainsGenericParameters: 型、またはそこに含まれているいずれかの型またはメソッドに、具体的な型が指定されていない型パラメーターが含まれている場合に true が返されます。
  • GenericParameterAttributes: 現在のジェネリック型パラメーターの特殊な制約を説明する GenericParameterAttributes フラグの組み合わせを取得します。
  • GenericParameterPosition: 型パラメーターを表す Type オブジェクトの場合、その型パラメーターが宣言されたジェネリック型定義、またはジェネリック メソッド定義の型パラメーター リストにおけるその位置を取得します。
  • IsGenericParameter: 現在の Type が、ジェネリック型定義またはジェネリック メソッド定義の型パラメーターを表すかどうかを示す値を取得します。
  • IsGenericTypeDefinition: 現在の Type が、他のジェネリック型を構築できるジェネリック型の定義を表しているかどうかを示す値を取得します。 その型がジェネリック型の定義を表している場合に true を返します。
  • DeclaringMethod: 現在のジェネリック型パラメーターを定義したジェネリック メソッドが返されます。その型パラメーターがジェネリック メソッドによって定義されたものではない場合は null が返されます。
  • MakeGenericType: 型の配列の要素を現在のジェネリック型定義の型パラメーターで置き換え、結果の構築型を表す Type オブジェクトが返されます。

さらに、MethodInfo クラスのメンバーは、ジェネリック メソッドの実行時の情報を有効にします。 ジェネリック メソッドのリフレクションで使用する用語に関する不変条件のリストについては、IsGenericMethod プロパティの解説を参照してください。

  • IsGenericMethod: メソッドがジェネリックである場合に true が返されます。
  • GetGenericArguments: 構築されたジェネリック メソッドの型引数、またはジェネリック メソッド定義の型パラメーターを表す Type オブジェクトの配列が返されます。
  • GetGenericMethodDefinition: 現在構築されているメソッドの基になるジェネリック メソッド定義が返されます。
  • ContainsGenericParameters: メソッド、またはそこに含まれているいずれかの型に、具体的な型の指定されていない型パラメーターが含まれている場合に true が返されます。
  • IsGenericMethodDefinition: 現在の MethodInfo がジェネリック メソッドの定義を表している場合に true が返されます。
  • MakeGenericMethod: 現在のジェネリック メソッド定義の型パラメーターを型の配列要素に置き換え、その結果構築されるメソッドを表す MethodInfo オブジェクトが返されます。

関連項目