MethodInfo.IsGenericMethodDefinition プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在の MethodInfo がジェネリック メソッドの定義を表しているかどうかを示す値を取得します。
public:
virtual property bool IsGenericMethodDefinition { bool get(); };
public override bool IsGenericMethodDefinition { get; }
member this.IsGenericMethodDefinition : bool
Public Overrides ReadOnly Property IsGenericMethodDefinition As Boolean
プロパティ値
MethodInfo オブジェクトがジェネリック メソッドの定義を表している場合は true
。それ以外の場合は false
。
例
次のコード例では、プロパティを IsGenericMethodDefinition
使用して、ジェネリック メソッド定義を表すかどうかを MethodInfo 示すメッセージを表示します。
この例は、メソッドで提供されるより大きな例の MakeGenericMethod 一部です。
Console.WriteLine(vbTab _
& "Is this a generic method definition? {0}", _
mi.IsGenericMethodDefinition)
Console.WriteLine("\tIs this a generic method definition? {0}",
mi.IsGenericMethodDefinition);
Console::WriteLine("\tIs this a generic method definition? {0}",
mi->IsGenericMethodDefinition);
注釈
現在 MethodInfo のメソッドがジェネリック メソッド定義を表す場合は、次のようになります。
IsGenericMethodDefinition
は、true
を返します。メソッドによって返される配列内の各 Type オブジェクトについて、次の手順を GetGenericArguments() 実行します。
Type.IsGenericParameter プロパティは、
true
を返します。現在Type.DeclaringMethodMethodInfoの値を返します。
この Type.GenericParameterPosition プロパティは、配列内のオブジェクトの Type 位置と同じです。
このプロパティを IsGenericMethodDefinition
使用して、ジェネリック メソッドの型パラメーターに型引数が割り当てられているかどうかを判断します。 型引数が割り当てられている場合、 IsGenericMethodDefinition
型引数の一部が外側の型の型パラメーターを表すオブジェクトである場合でも、プロパティは Type false を返します。 たとえば、次の C#、Visual Basic、および C++ コードについて考えてみます。
```cs
class C
{
T N<T,U>(T t, U u) {...}
public V M<V>(V v)
{
return N<V,int>(v, 42);
}
}
```
```vb
Class C
Public Function N(Of T,U)(ByVal ta As T, ByVal ua As U) As T
...
End Function
Public Function M(Of V)(ByVal va As V ) As V
Return N(Of V, Integer)(va, 42)
End Function
End Class
```
```cpp
ref class C
{
private:
generic <typename T, typename U> T N(T t, U u) {...}
public:
generic <typename V> V M(V v)
{
return N<V, int>(v, 42);
}
};
```
M のメソッド本体には、M の型パラメーターと型 Int32を指定するメソッド N の呼び出しが含まれています。 このプロパティは IsGenericMethodDefinition
、メソッド N<V,int>
に対して false を返します。
注意
クラス C に反映する場合、オープン構築メソッドは検出されませんが、C を動的クラスとして出力するには、そのメソッド N<V,int>
を使用して MakeGenericMethod 生成する必要があります。
ジェネリック メソッド定義に宣言型のジェネリック パラメーターが含まれている場合は、構築された各型に固有のジェネリック メソッド定義が存在します。 たとえば、次の C# コードと Visual Basic コードについて考えてみます。
```csharp
class B<U,V> {}
class C<T> { public B<T,S> M<S>() {...}}
```
```vb
Class B(Of U, V)
End Class
Class C(Of T)
Public Function M(Of S)() As B(Of T, S)
...
End Function
End Class
```
```cpp
generic <typename U, typename V> ref class B {};
generic <typename T> ref class C
{
public:
generic <typename S> B<T,S>^ M() {...};
};
```
構築された型 C<int>
(C(Of Integer)
Visual Basic) では、ジェネリック メソッド M が返しますB<int, S>
。 開いている型 C<T>
では、M が返します B<T, S>
。 どちらの場合も、M をIsGenericMethodDefinition
表すプロパティがMethodInfo返true
されます。
ジェネリック メソッドに固有の用語の不変条件の一覧については、プロパティを IsGenericMethod 参照してください。 ジェネリック リフレクションで使用される他の用語の不変条件の一覧については、プロパティを IsGenericType 参照してください。