Rendszer. Önkifejezés ion. Emit.MethodBuilder osztály
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
Az MethodBuilder osztály egy közös köztes nyelv (CIL) metódusának teljes leírására szolgál, beleértve a nevet, az attribútumokat, az aláírást és a metódus törzsét. Az osztályokkal együtt használják az TypeBuilder osztályok futásidőben történő létrehozására.
A tükrözési emit használatával globális metódusokat definiálhat, és típustagokként definiálhat metódusokat. A metódusokat definiáló API-k objektumokat adnak vissza MethodBuilder .
Globális módszerek
A globális metódus a metódussal ModuleBuilder.DefineGlobalMethod van definiálva, amely egy objektumot MethodBuilder
ad vissza.
A globális módszereknek statikusnak kell lenniük. Ha egy dinamikus modul globális metódusokat tartalmaz, a metódust a ModuleBuilder.CreateGlobalFunctions dinamikus modul vagy a dinamikus szerelvény megőrzése előtt kell meghívni, mert a közös nyelvi futtatókörnyezet elhalasztja a dinamikus modul javítását, amíg az összes globális függvény meg nem van határozva.
A globális natív metódus a ModuleBuilder.DefinePInvokeMethod metódus használatával van definiálva. A platformhívási (PInvoke) metódusokat nem lehet absztraktnak vagy virtuálisnak minősíteni. A futtatókörnyezet beállítja a MethodAttributes.PinvokeImpl platformhívási metódus attribútumát.
Metódusok a típusok tagjaiként
A metódus típustagként van definiálva a TypeBuilder.DefineMethod metódus használatával, amely egy objektumot MethodBuilder ad vissza.
A DefineParameter metódus egy paraméter vagy a visszatérési érték nevének és paraméterattribútumainak beállítására szolgál. A ParameterBuilder metódus által visszaadott objektum egy paramétert vagy visszatérési értéket jelöl. Az ParameterBuilder objektum használható a marshaling beállítására, az állandó érték beállítására és egyéni attribútumok alkalmazására.
Attribútumok
Az enumerálás tagjai MethodAttributes meghatározzák a dinamikus metódus pontos karakterét:
- A statikus metódusok az MethodAttributes.Static attribútum használatával vannak megadva.
- A végső metódusok (amelyek nem bírálhatók felül) az MethodAttributes.Final attribútum használatával vannak megadva.
- A virtuális metódusok az MethodAttributes.Virtual attribútum használatával vannak megadva.
- Az absztrakt metódusok az MethodAttributes.Abstract attribútum használatával vannak megadva.
- A metódus láthatóságát számos attribútum határozza meg. Tekintse meg az enumerálás leírását MethodAttributes .
- A túlterhelt operátorokat megvalósító metódusoknak be kell állítaniuk az MethodAttributes.SpecialName attribútumot.
- A véglegesítőknek be kell állítaniuk az MethodAttributes.SpecialName attribútumot.
Ismert problémák
- Bár MethodBuilder származik MethodInfo, az osztályban meghatározott absztrakt metódusok némelyike nem teljes mértékben implementálva van a MethodInfo következőben MethodBuilder: . Ezek a MethodBuilder módszerek dobja a NotSupportedException. A metódus például MethodBuilder.Invoke nincs teljesen implementálva. Ezekre a metódusokra a beágyazási típus vagy Assembly.GetType metódusok használatával való beolvasásával Type.GetType tud reflektálni.
- Az egyéni módosítók támogatottak.