Freigeben über


MethodInfo.IsGenericMethodDefinition Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob die aktuelle MethodInfo die Definition einer generischen Methode darstellt.

public:
 virtual property bool IsGenericMethodDefinition { bool get(); };
public override bool IsGenericMethodDefinition { get; }
member this.IsGenericMethodDefinition : bool
Public Overrides ReadOnly Property IsGenericMethodDefinition As Boolean

Eigenschaftswert

true, wenn das MethodInfo-Objekt die Definition einer generischen Methode darstellt, andernfalls false.

Beispiele

Im folgenden Codebeispiel wird die IsGenericMethodDefinition -Eigenschaft verwendet, um eine Meldung anzuzeigen, die angibt, ob eine MethodInfo generische Methodendefinition darstellt.

Dieses Beispiel ist Teil eines größeren Beispiels, das für die MakeGenericMethod -Methode bereitgestellt wird.

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);

Hinweise

Wenn der aktuelle MethodInfo eine generische Methodendefinition darstellt, dann:

Verwenden Sie die IsGenericMethodDefinition -Eigenschaft, um zu bestimmen, ob den Typparametern einer generischen Methode Typargumente zugewiesen wurden. Wenn Typargumente zugewiesen wurden, gibt die IsGenericMethodDefinition Eigenschaft false zurück, auch wenn einige der Typargumente Objekte sind Type , die Typparameter von eingeschlossenen Typen darstellen. Betrachten Sie beispielsweise den folgenden C#-, Visual Basic- und C++-Code:

```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);
    }
};
```

Der Methodentext von M enthält einen Aufruf der Methode N, der den Typparameter M und den Typ Int32angibt. Die IsGenericMethodDefinition -Eigenschaft gibt false für die -Methode N<V,int>zurück.

Hinweis

Obwohl die offene konstruierte Methode N<V,int> nicht auftritt, wenn sie über Klasse C reflektiert wird, muss sie mit MakeGenericMethod generiert werden, um C als dynamische Klasse auszuweisen.

Wenn eine generische Methodendefinition generische Parameter des deklarierenden Typs enthält, gibt es eine generische Methodendefinition, die für jeden konstruierten Typ spezifisch ist. Betrachten Sie beispielsweise den folgenden C#- und Visual Basic-Code:

```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() {...};
};
```

Im konstruierten Typ C<int> (C(Of Integer) in Visual Basic) gibt die generische Methode M zurück B<int, S>. Im geöffneten Typ C<T>gibt M zurück B<T, S>. In beiden Fällen gibt die IsGenericMethodDefinition -Eigenschaft für das zurück true , das MethodInfo M darstellt.

Eine Liste der invarianten Bedingungen für begriffe, die für generische Methoden spezifisch sind, finden Sie in der IsGenericMethod -Eigenschaft. Eine Liste der invarianten Bedingungen für andere Begriffe, die in der generischen Reflexion verwendet werden, finden Sie in der IsGenericType -Eigenschaft.

Gilt für:

Weitere Informationen