MethodInfo.IsGenericMethodDefinition Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan nilai yang menunjukkan apakah saat ini MethodInfo mewakili definisi metode generik.
public:
virtual property bool IsGenericMethodDefinition { bool get(); };
public override bool IsGenericMethodDefinition { get; }
member this.IsGenericMethodDefinition : bool
Public Overrides ReadOnly Property IsGenericMethodDefinition As Boolean
Nilai Properti
true
MethodInfo jika objek mewakili definisi metode generik; jika tidak, false
.
Contoh
Contoh kode berikut menggunakan IsGenericMethodDefinition
properti untuk menampilkan pesan yang menunjukkan apakah mewakili MethodInfo definisi metode generik.
Contoh ini adalah bagian dari contoh yang lebih besar yang disediakan untuk metode .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);
Keterangan
Jika saat ini MethodInfo mewakili definisi metode generik, maka:
IsGenericMethodDefinition
menghasilkantrue
.Untuk setiap Type objek dalam array yang dikembalikan oleh GetGenericArguments() metode :
Properti Type.IsGenericParameter mengembalikan
true
.mengembalikan Type.DeclaringMethod .MethodInfo
Properti Type.GenericParameterPosition sama dengan posisi Type objek dalam array.
IsGenericMethodDefinition
Gunakan properti untuk menentukan apakah argumen jenis telah ditetapkan ke parameter jenis metode generik. Jika argumen jenis telah ditetapkan, IsGenericMethodDefinition
properti mengembalikan false meskipun beberapa argumen jenis adalah Type objek yang mewakili parameter jenis jenis yang mencakup jenis. Misalnya, pertimbangkan kode C#, Visual Basic, dan C++ berikut:
```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);
}
};
```
Isi metode M berisi panggilan ke metode N, menentukan parameter jenis M dan jenis Int32. Properti IsGenericMethodDefinition
mengembalikan false untuk metode N<V,int>
.
Catatan
Meskipun metode yang dibangun terbuka tidak ditemui saat mencerminkan lebih dari kelas C, metode N<V,int>
tersebut harus dihasilkan menggunakan MakeGenericMethod untuk memancarkan C sebagai kelas dinamis.
Jika definisi metode generik menyertakan parameter generik dari jenis deklarasikan, akan ada definisi metode generik khusus untuk setiap jenis yang dibangun. Misalnya, pertimbangkan kode C# dan Visual Basic berikut:
```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() {...};
};
```
Dalam jenis C<int>
yang dibangun (C(Of Integer)
dalam Visual Basic), metode generik M mengembalikan B<int, S>
. Dalam jenis C<T>
terbuka , M mengembalikan B<T, S>
. Dalam kedua kasus, IsGenericMethodDefinition
properti mengembalikan true
untuk MethodInfo yang mewakili M.
Untuk daftar kondisi invarian untuk istilah khusus untuk metode generik, lihat IsGenericMethod properti . Untuk daftar kondisi invarian untuk istilah lain yang digunakan dalam refleksi generik, lihat IsGenericType properti .