MethodBuilder.MakeGenericMethod(Type[]) Metoda

Definice

Vrátí obecnou metodu vytvořenou z aktuální definice obecné metody pomocí zadaných argumentů obecného typu.

public override System.Reflection.MethodInfo MakeGenericMethod(params Type[] typeArguments);

Parametry

typeArguments
Type[]

Pole Type objektů, které představují argumenty typu pro obecnou metodu.

Návraty

A MethodInfo představující obecnou metodu vytvořenou z aktuální definice obecné metody pomocí zadaných argumentů obecného typu.

Příklady

Následující příklad kódu vytvoří vytvořenou metodu z neúplné definice obecné metody v neúplném typu.

Příklad vytvoří přechodné sestavení a modul s jedním typem, přidá metodu Ma nastaví metodu jako obecnou přidáním parametru typu T pomocí DefineGenericParameters metody . Parametr type se používá jako typ parametru metody a také jako jeho návratový typ. Definice obecné metody není zadána tělo a ohraničující typ není dokončen. Metoda MakeGenericMethod se pak použije k vytvoření vytvořené metody M<String> (M(Of String) v jazyce Visual Basic). Ukázkový kód nemá žádný výstup, protože podtřída MethodInfo vrácená metodou MakeGenericMethod neumožňuje odraz nad svými parametry.

Poznámka

Další příklad kódu, který používá MakeGenericMethod, najdete v tématu DefineGenericParameters. MakeGenericMethod se také často používá při generování kódu, který používá obecné typy. Viz Postupy: Definování obecné metody pomocí emitu reflexe.

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.
    }
}

Poznámky

Při generování dynamického kódu může být nutné generovat volání metody vytvořené z definice obecné metody reprezentované MethodBuilder, před dokončením ohraničujícího typu. Pomocí metody můžete MakeGenericMethod vytvořit MethodInfo pro takovou konstruovanou metodu a použít metodu MethodInfo v generovaném volání.

Platí pro

Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided), 2.1

Viz také