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.DeclaringMethod 目前的 MethodInfo 。
Type.GenericParameterPosition屬性和 Type 物件在陣列中的位置相同。
IsGenericMethodDefinition
您可以使用屬性來判斷是否已指派型別引數給泛型方法的型別參數。 如果已指派型別引數, IsGenericMethodDefinition
即使某些型別引數是代表封入類型之型別參數的物件,屬性也會傳回 false Type 。 例如,請考慮下列 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 的方法主體包含方法 N 的呼叫,並指定 M 的型別參數和型別 Int32 。 方法的屬性會傳回 IsGenericMethodDefinition
false N<V,int>
。
注意
雖然在 N<V,int>
反映類別 C 時,不會遇到開啟的已建立方法,但必須使用 MakeGenericMethod 來產生,才能以動態類別的形式發出 C。
如果泛型方法定義包含宣告類型的泛型參數,則每個結構化類型都會有特定的泛型方法定義。 例如,請考慮下列 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() {...};
};
```
在 Visual Basic) 中的結構化型別 C<int>
(C(Of Integer)
,泛型方法 M 會傳回 B<int, S>
。 在開啟的類型中 C<T>
,M 會傳回 B<T, S>
。 在這兩種情況下, IsGenericMethodDefinition
屬性 true
會傳回 MethodInfo 代表 M 的。
如需泛型方法特定詞彙的非變異條件清單,請參閱 IsGenericMethod 屬性。 如需一般反映中所使用之其他詞彙的非變異條件清單,請參閱 IsGenericType 屬性。