Systému. Reflexe ion. Emit.MethodBuilder – třída
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Třída MethodBuilder se používá k úplnému popisu metody v common intermediate language (CIL), včetně názvu, atributů, podpisu a textu metody. Používá se ve spojení s TypeBuilder třídou k vytváření tříd za běhu.
Pomocí generování reflexe můžete definovat globální metody a definovat metody jako členy typu. Rozhraní API definující metody vracejí MethodBuilder objekty.
Globální metody
Globální metoda je definována pomocí ModuleBuilder.DefineGlobalMethod metody, která vrací MethodBuilder
objekt.
Globální metody musí být statické. Pokud dynamický modul obsahuje globální metody, ModuleBuilder.CreateGlobalFunctions musí být volána metoda před zachováním dynamického modulu nebo obsahujícího dynamické sestavení, protože modul CLR odloží opravu dynamického modulu, dokud nebudou definovány všechny globální funkce.
Globální nativní metoda je definována pomocí ModuleBuilder.DefinePInvokeMethod metody. Metody volání platformy (PInvoke) nesmí být deklarovány jako abstraktní nebo virtuální. Modul runtime nastaví MethodAttributes.PinvokeImpl atribut pro metodu vyvolání platformy.
Metody jako členy typů
Metoda je definována jako člen typu pomocí TypeBuilder.DefineMethod metody, která vrací MethodBuilder objekt.
Metoda DefineParameter se používá k nastavení atributů názvu a parametru parametru nebo návratové hodnoty. Objekt ParameterBuilder vrácený touto metodou představuje parametr nebo návratovou hodnotu. Objekt ParameterBuilder lze použít k nastavení zařazování, nastavení konstantní hodnoty a použití vlastních atributů.
Atributy
Členové výčtu MethodAttributes definují přesný znak dynamické metody:
- Statické metody jsou zadány pomocí atributu MethodAttributes.Static .
- Konečné metody (metody, které nelze přepsat) se zadají pomocí atributu MethodAttributes.Final .
- Virtuální metody se zadají pomocí atributu MethodAttributes.Virtual .
- Abstraktní metody jsou zadány pomocí atributu MethodAttributes.Abstract .
- Viditelnost metody určuje několik atributů. Podívejte se na popis výčtu MethodAttributes .
- Metody, které implementují přetížené operátory, musí nastavit MethodAttributes.SpecialName atribut.
- Finalizační metody musí nastavit MethodAttributes.SpecialName atribut.
Známé problémy
- Ačkoli MethodBuilder je odvozen z MethodInfo, některé z abstraktních metod definovaných ve MethodInfo třídě nejsou plně implementovány v MethodBuilder. Tyto MethodBuilder metody vyvolají NotSupportedException. Například MethodBuilder.Invoke metoda není plně implementována. Tyto metody můžete reflektovat načtením ohraničujícího typu pomocí Type.GetType metod nebo Assembly.GetType metod.
- Podporují se vlastní modifikátory.