MethodBuilder.MakeGenericMethod(Type[]) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt eine generische Methode aus der aktuellen generischen Methodendefinition mithilfe der angegebenen generischen Typargumente zurück.
public:
override System::Reflection::MethodInfo ^ MakeGenericMethod(... cli::array <Type ^> ^ typeArguments);
public override System.Reflection.MethodInfo MakeGenericMethod(params Type[] typeArguments);
override this.MakeGenericMethod : Type[] -> System.Reflection.MethodInfo
Public Overrides Function MakeGenericMethod (ParamArray typeArguments As Type()) As MethodInfo
Parameter
- typeArguments
- Type[]
Ein Array von Type Objekten, die die Typargumente für die generische Methode darstellen.
Gibt zurück
A MethodInfo representing the generic method constructed from the current generic method definition using the specified generic type arguments.
Beispiele
Im folgenden Codebeispiel wird eine konstruierte Methode aus einer unvollständigen generischen Methodendefinition in einem unvollständigen Typ erstellt.
Im Beispiel wird eine vorübergehende Assembly und ein Modul mit einem einzigen Typ erstellt, eine Methode Mhinzugefügt und die Methode durch Hinzufügen eines Typparameters T mithilfe der DefineGenericParameters Methode generisch. Der Typparameter wird als Typ des Parameters der Methode und auch als Rückgabetyp verwendet. Die generische Methodendefinition erhält keinen Text, und der eingeschlossene Typ ist nicht abgeschlossen. Anschließend wird die MakeGenericMethod-Methode verwendet, um die konstruierte Methode M<String> (M(Of String) in Visual Basic) zu erstellen. Der Beispielcode hat keine Ausgabe, da die von der MakeGenericMethod Methode zurückgegebene Unterklasse MethodInfo keine Spiegelung über die Parameter zulässt.
Note
Ein weiteres Codebeispiel, das verwendet MakeGenericMethodwird, finden Sie unter DefineGenericParameters. MakeGenericMethod wird auch umfassend verwendet, wenn Code ausgibt, der generische Typen verwendet. Siehe Vorgehensweise: Definieren einer generischen Methode mit Reflection Emit.
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
Hinweise
Wenn Sie dynamischen Code ausgeben, müssen Sie möglicherweise einen Aufruf einer Methode ausgeben, die aus der generischen Methodendefinition erstellt wurde, die durch eine MethodBuilder, bevor der eingeschlossene Typ abgeschlossen wurde. Sie können die MakeGenericMethod Methode verwenden, um eine MethodInfo solche konstruierte Methode zu erstellen und den MethodInfo im ausgegebenen Aufruf zu verwenden.