次の方法で共有


MethodInfo.IsGenericMethodDefinition プロパティ

定義

現在の 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 使用して、ジェネリック メソッドの型パラメーターに型引数が割り当てられているかどうかを確認します。 型引数が割り当てられている場合、 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 の型パラメーターと 型 を指定するメソッド N の呼び出しが Int32含まれています。 プロパティは IsGenericMethodDefinition 、メソッド N<V,int>に対して false を返します。

注意

クラス C に反映する場合、オープン構築メソッド N<V,int> は検出されませんが、C を動的クラスとして出力するには、 を使用して 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 をIsGenericMethodDefinitiontrue表す の をMethodInfo返します。

ジェネリック メソッドに固有の用語の不変条件の一覧については、 プロパティを IsGenericMethod 参照してください。 ジェネリック リフレクションで使用される他の用語の不変条件の一覧については、 プロパティを IsGenericType 参照してください。

適用対象

こちらもご覧ください