Share via


MethodInfo.GetGenericMethodDefinition Metode

Definisi

MethodInfo Mengembalikan objek yang mewakili definisi metode generik tempat metode saat ini dapat dibangun.

public:
 virtual System::Reflection::MethodInfo ^ GetGenericMethodDefinition();
public virtual System.Reflection.MethodInfo GetGenericMethodDefinition ();
[System.Runtime.InteropServices.ComVisible(true)]
public virtual System.Reflection.MethodInfo GetGenericMethodDefinition ();
abstract member GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
override this.GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
override this.GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
Public Overridable Function GetGenericMethodDefinition () As MethodInfo

Mengembalikan

Objek MethodInfo yang mewakili definisi metode generik tempat metode saat ini dapat dibangun.

Atribut

Pengecualian

Metode saat ini bukan metode generik. Artinya, IsGenericMethod mengembalikan false.

Metode ini tidak didukung.

Contoh

Contoh kode berikut menunjukkan kelas dengan metode generik dan kode yang MethodInfo diperlukan untuk mendapatkan untuk metode , mengikat metode untuk mengetik argumen, dan mendapatkan definisi jenis generik asli kembali dari metode terikat.

Contoh ini adalah bagian dari contoh yang lebih besar yang disediakan untuk metode .MakeGenericMethod

// Define a class with a generic method.
ref class Example
{
public:
    generic<typename T> static void Generic(T toDisplay)
    {
        Console::WriteLine("\r\nHere it is: {0}", toDisplay);
    }
};
// Define a class with a generic method.
public class Example
{
    public static void Generic<T>(T toDisplay)
    {
        Console.WriteLine("\r\nHere it is: {0}", toDisplay);
    }
}
' Define a class with a generic method.
Public Class Example
    Public Shared Sub Generic(Of T)(ByVal toDisplay As T)
        Console.WriteLine(vbCrLf & "Here it is: {0}", toDisplay)
    End Sub
End Class
// Create a Type object representing class Example, and
// get a MethodInfo representing the generic method.
//
Type^ ex = Example::typeid;
MethodInfo^ mi = ex->GetMethod("Generic");

DisplayGenericMethodInfo(mi);

// Assign the int type to the type parameter of the Example 
// method.
//
MethodInfo^ miConstructed = mi->MakeGenericMethod(int::typeid);

DisplayGenericMethodInfo(miConstructed);
// Create a Type object representing class Example, and
// get a MethodInfo representing the generic method.
//
Type ex = typeof(Example);
MethodInfo mi = ex.GetMethod("Generic");

DisplayGenericMethodInfo(mi);

// Assign the int type to the type parameter of the Example
// method.
//
MethodInfo miConstructed = mi.MakeGenericMethod(typeof(int));

DisplayGenericMethodInfo(miConstructed);
' Create a Type object representing class Example, and
' get a MethodInfo representing the generic method.
'
Dim ex As Type = GetType(Example)
Dim mi As MethodInfo = ex.GetMethod("Generic")

DisplayGenericMethodInfo(mi)

' Assign the Integer type to the type parameter of the Example 
' method.
'
Dim arguments() As Type = { GetType(Integer) }
Dim miConstructed As MethodInfo = mi.MakeGenericMethod(arguments)

DisplayGenericMethodInfo(miConstructed)
// Get the generic type definition from the closed method,
// and show it's the same as the original definition.
//
MethodInfo^ miDef = miConstructed->GetGenericMethodDefinition();
Console::WriteLine("\r\nThe definition is the same: {0}",
        miDef == mi);
// Get the generic type definition from the closed method,
// and show it's the same as the original definition.
//
MethodInfo miDef = miConstructed.GetGenericMethodDefinition();
Console.WriteLine("\r\nThe definition is the same: {0}",
    miDef == mi);
' Get the generic type definition from the constructed method,
' and show that it's the same as the original definition.
'
Dim miDef As MethodInfo = miConstructed.GetGenericMethodDefinition()
Console.WriteLine(vbCrLf & "The definition is the same: {0}", _
    miDef Is mi)

Keterangan

Definisi metode generik adalah templat tempat metode dapat dibangun. Misalnya, dari definisi T M<T>(T t) metode generik (dinyatakan dalam sintaks C#; Function M(Of T)(ByVal tVal As T) As T dalam Visual Basic) Anda dapat membuat dan memanggil metode int M<int>(int t) (Function M(Of Integer)(ByVal tVal As Integer) As Integer dalam Visual Basic). Mengingat objek yang MethodInfo mewakili metode yang dibangun ini, GetGenericMethodDefinition metode mengembalikan definisi metode generik.

Jika dua metode yang dibuat dibuat dari definisi metode generik yang sama, GetGenericMethodDefinition metode mengembalikan objek yang sama MethodInfo untuk kedua metode.

Jika Anda memanggil GetGenericMethodDefinitionMethodInfo yang sudah mewakili definisi metode generik, definisi tersebut mengembalikan MethodInfo.

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#, Visual Basic, dan C++ berikut:

class B<U,V> {}
class C<T> { public B<T,S> M<S>() {...}}

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

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 M generik 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, sehingga MakeGenericMethod dapat dipanggil pada kedua MethodInfo objek. Dalam kasus jenis yang dibangun, hasil panggilan MakeGenericMethod adalah MethodInfo yang dapat dipanggil. Dalam kasus jenis terbuka, yang MethodInfo dikembalikan oleh MakeGenericMethod tidak dapat dipanggil.

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 .

Berlaku untuk

Lihat juga