MethodBuilder.MakeGenericMethod(Type[]) Metode
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.
Mengembalikan metode generik yang dibangun dari definisi metode generik saat ini menggunakan argumen jenis generik yang ditentukan.
public:
override System::Reflection::MethodInfo ^ MakeGenericMethod(... cli::array <Type ^> ^ typeArguments);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The native code for this instantiation might not be available at runtime.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met.")]
public override System.Reflection.MethodInfo MakeGenericMethod(params Type[] typeArguments);
public override System.Reflection.MethodInfo MakeGenericMethod(params Type[] typeArguments);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met.")]
public override System.Reflection.MethodInfo MakeGenericMethod(params Type[] typeArguments);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The native code for this instantiation might not be available at runtime.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met.")>]
override this.MakeGenericMethod : Type[] -> System.Reflection.MethodInfo
override this.MakeGenericMethod : Type[] -> System.Reflection.MethodInfo
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met.")>]
override this.MakeGenericMethod : Type[] -> System.Reflection.MethodInfo
Public Overrides Function MakeGenericMethod (ParamArray typeArguments As Type()) As MethodInfo
Parameter
Mengembalikan
Yang MethodInfo mewakili metode generik yang dibangun dari definisi metode generik saat ini menggunakan argumen jenis generik yang ditentukan.
- Atribut
Contoh
Contoh kode berikut membuat metode yang dibangun dari definisi metode generik yang tidak lengkap dalam jenis yang tidak lengkap.
Contoh membuat rakitan dan modul sementara dengan satu jenis, menambahkan metode M, dan membuat metode generik dengan menambahkan parameter jenis T menggunakan DefineGenericParameters metode . Parameter jenis digunakan sebagai jenis parameter metode, dan juga sebagai jenis pengembaliannya. Definisi metode generik tidak diberi isi, dan jenis penutup tidak selesai. Metode MakeGenericMethod kemudian digunakan untuk membuat metode yang dibangun M<String> (M(Of String) di Visual Basic). Contoh kode tidak memiliki output, karena subkelas MethodInfo yang dikembalikan oleh MakeGenericMethod metode tidak memungkinkan refleksi atas parameternya.
Note
Untuk contoh kode lain yang menggunakan MakeGenericMethod, lihat DefineGenericParameters. MakeGenericMethod juga digunakan secara ekstensif saat memancarkan kode yang menggunakan jenis generik. Lihat Cara: Menentukan Metode Generik dengan Pancaran Pantulan.
using System;
using System.Reflection;
using System.Reflection.Emit;
class Example
{
public static void Main()
{
// Define a transient dynamic assembly (only to run, not
// to save) with one module and a type "Test".
//
AssemblyName aName = new AssemblyName("MyDynamic");
AssemblyBuilder ab =
AppDomain.CurrentDomain.DefineDynamicAssembly(
aName,
AssemblyBuilderAccess.Run);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name);
TypeBuilder tb = mb.DefineType("Test");
// Add a public static method "M" to Test, and make it a
// generic method with one type parameter named "T").
//
MethodBuilder meb = tb.DefineMethod("M",
MethodAttributes.Public | MethodAttributes.Static);
GenericTypeParameterBuilder[] typeParams =
meb.DefineGenericParameters(new string[] { "T" });
// Give the method one parameter, of type T, and a
// return type of T.
meb.SetParameters(typeParams);
meb.SetReturnType(typeParams[0]);
// Create a MethodInfo for M<string>, which can be used in
// emitted code. This is possible even though the method
// does not yet have a body, and the enclosing type is not
// created.
MethodInfo mi = meb.MakeGenericMethod(typeof(string));
// Note that this is actually a subclass of MethodInfo,
// which has rather limited capabilities -- for
// example, you cannot reflect on its parameters.
}
}
Imports System.Reflection
Imports System.Reflection.Emit
Class Example
Public Shared Sub Main()
' Define a transient dynamic assembly (only to run, not
' to save) with one module and a type "Test".
'
Dim aName As AssemblyName = New AssemblyName("MyDynamic")
Dim ab As AssemblyBuilder = _
AppDomain.CurrentDomain.DefineDynamicAssembly( _
aName, _
AssemblyBuilderAccess.Run)
Dim mb As ModuleBuilder = ab.DefineDynamicModule(aName.Name)
Dim tb As TypeBuilder = mb.DefineType("Test")
' Add a Public Shared method "M" to Test, and make it a
' generic method with one type parameter named "T").
'
Dim meb As MethodBuilder = tb.DefineMethod("M", _
MethodAttributes.Public Or MethodAttributes.Static)
Dim typeParams() As GenericTypeParameterBuilder = _
meb.DefineGenericParameters(New String() { "T" })
' Give the method one parameter, of type T, and a
' return type of T.
meb.SetParameters(typeParams)
meb.SetReturnType(typeParams(0))
' Create a MethodInfo for M(Of String), which can be used
' in emitted code. This is possible even though the method
' does not yet have a body, and the enclosing type is not
' created.
Dim mi As MethodInfo = _
meb.MakeGenericMethod(GetType(String))
' Note that this is actually a subclass of MethodInfo,
' which has rather limited capabilities -- for
' example, you cannot reflect on its parameters.
End Sub
End Class
Keterangan
Ketika Anda memancarkan kode dinamis, Anda mungkin perlu memancarkan panggilan ke metode yang dibangun dari definisi metode generik yang MethodBuilderdiwakili oleh , sebelum jenis penutup selesai. Anda dapat menggunakan MakeGenericMethod metode untuk membuat MethodInfo metode yang dibuat seperti itu MethodInfo , dan menggunakan dalam panggilan yang dipancarkan.