Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
Klassen MethodBuilder används för att helt beskriva en metod i det gemensamma mellanliggande språket (CIL), inklusive namn, attribut, signatur och metodtext. Den används tillsammans med TypeBuilder, klassen för att skapa klasser under körning.
Du kan använda reflektionsemitta för att definiera globala metoder och definiera metoder som typmedlemmar. DE API:er som definierar metoder returnerar MethodBuilder objekt.
Globala metoder
En global metod definieras med hjälp av ModuleBuilder.DefineGlobalMethod-metoden, som returnerar ett MethodBuilder-objekt.
Globala metoder måste vara statiska. Om en dynamisk modul innehåller globala metoder ModuleBuilder.CreateGlobalFunctions måste metoden anropas innan den dynamiska modulen bevaras eller den innehållande dynamiska sammansättningen eftersom den gemensamma språkkörningen skjuter upp fixeringen av den dynamiska modulen tills alla globala funktioner har definierats.
En global inbyggd metod definieras med hjälp av ModuleBuilder.DefinePInvokeMethod. PInvoke-metoder (platform invoke) får inte deklareras som abstrakta eller virtuella. Körmiljön ställer in MethodAttributes.PinvokeImpl-attributet för en plattformsanropsmetod.
Metoder som medlemmar i typer
En metod definieras som en typmedlem genom att använda TypeBuilder.DefineMethod metoden, vilken returnerar ett MethodBuilder objekt.
Metoden DefineParameter används för att ange namn- och parameterattribut för en parameter eller för returvärdet. Objektet ParameterBuilder som returneras med den här metoden representerar en parameter eller returvärdet. Objektet ParameterBuilder kan användas för att ange marshaling, för att ange konstantvärdet och för att tillämpa anpassade attribut.
Egenskaper
Medlemmar i MethodAttributes uppräkningen definierar det exakta tecknet för en dynamisk metod:
- Statiska metoder anges med hjälp av attributet MethodAttributes.Static .
- Slutgiltiga metoder (metoder som inte kan åsidosättas) anges med hjälp av attributet MethodAttributes.Final .
- Virtuella metoder anges med hjälp av attributet MethodAttributes.Virtual .
- Abstrakta metoder anges med hjälp av attributet MethodAttributes.Abstract .
- Flera attribut avgör metodens synlighet. Se beskrivningen av MethodAttributes uppräkningen.
- Metoder som implementerar överbelastade operatorer måste ange attributet MethodAttributes.SpecialName .
- Finalizers måste ange attributet MethodAttributes.SpecialName.
Kända problemområden
- Även om MethodBuilder härleds från MethodInfoimplementeras inte några av de abstrakta metoder som definierats i MethodInfo klassen fullständigt i MethodBuilder. Dessa MethodBuilder metoder genererar NotSupportedException. Metoden är till exempel MethodBuilder.Invoke inte helt implementerad. Du kan reflektera över dessa metoder genom att hämta omslutningstypen med hjälp av Type.GetType-metoden eller Assembly.GetType-metoden.
- Anpassade modifierare stöds.