Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
TypeBuilder a futtatókörnyezetben a dinamikus osztályok létrehozásának szabályozására használt gyökérosztály. Olyan rutinokat biztosít, amelyek osztályokat definiálnak, metódusokat és mezőket adnak hozzá, és egy modulon belül hozzák létre az osztályt. Egy új TypeBuilder dinamikus modulból létrehozható a ModuleBuilder.DefineType metódus meghívásával, amely egy objektumot TypeBuilder ad vissza.
A reflexiós emittálás a következő lehetőségeket kínálja a típusok meghatározásához:
- Adjon meg egy osztályt vagy felületet a megadott névvel.
- Adjon meg egy osztályt vagy felületet a megadott névvel és attribútumokkal.
- Adjon meg egy adott nevet, attribútumokat és alaposztályt tartalmazó osztályt.
- Definiáljon egy osztályt a megadott névvel, attribútumokkal, alaposztálysal és az osztály által implementálható interfészkészlettel.
- Adjon meg egy osztályt a megadott névvel, attribútumokkal, alaposztálysal és csomagolási mérettel.
- Definiáljon egy osztályt a megadott névvel, attribútumokkal, alaposztálysal és az osztály méretével egészben.
- Definiáljon egy osztályt a megadott névvel, attribútumokkal, alaposztálysal, csomagolási mérettel és az osztály egészével.
Ha egy TypeBuilder objektum által képviselt hiányos típushoz tömbtípust, mutatótípust vagy byref típust szeretne létrehozni, használja a MakeArrayType metódust, a MakePointerType metódust vagy a MakeByRefType metódust.
A típus használata előtt meg kell hívni a metódust TypeBuilder.CreateType . A CreateType befejezi a típus létrehozását. A CreateType hívását követően a hívó a metódus használatával példányosíthatja a Activator.CreateInstance típust, és meghívhatja a típus tagjait a Type.InvokeMember metódus használatával. Hiba olyan metódusokat meghívni, amelyek megváltoztatják egy típus implementációját a CreateType meghívása után. A közös nyelvi futtatókörnyezet például kivételt jelez, ha a hívó új tagokat próbál hozzáadni egy típushoz.
A metódus használatával létrejön egy TypeBuilder.DefineTypeInitializer osztály inicializálója. A DefineTypeInitializer egy objektumot ConstructorBuilder ad vissza.
A beágyazott típusok az egyik TypeBuilder.DefineNestedType metódus meghívásával vannak definiálva.
Tulajdonságok
Az TypeBuilder osztály az enumerálást használja a TypeAttributes létrehozandó típus jellemzőinek további meghatározására:
- Az interfészek a TypeAttributes.Interface és TypeAttributes.Abstract attribútumok használatával vannak megadva.
- A konkrét osztályok (nem bővíthető osztályok) az TypeAttributes.Sealed attribútum használatával vannak megadva.
- Számos attribútum határozza meg a típus láthatóságát. Tekintse meg az TypeAttributes enumeráció leírását.
- Ha TypeAttributes.SequentialLayout meg van adva, az osztálybetöltő a metaadatokból beolvasott mezők sorrendjét határozza meg. Az osztálybetöltő figyelembe veszi a megadott csomagolási méretet, de figyelmen kívül hagyja a megadott mezőeltolódásokat. A metaadatok megőrzik a meződefiníciók kibocsátásának sorrendjét. A metaadatok még az egyesítés során sem rendezik újra a meződefiníciókat. A betöltő csak akkor veszi figyelembe a megadott mezőeltolásokat, ha TypeAttributes.ExplicitLayout meg van adva.
Ismert problémák
- A tükröződéskibocsátó nem ellenőrzi, hogy az interfészt implementáló nem absztrakt osztály implementálta-e a felületen deklarált összes metódust. Ha azonban az osztály nem implementálja a felületen deklarált összes metódust, a futtatókörnyezet nem tölti be az osztályt.
- Bár TypeBuilder az osztályból Typeszármazik, az osztályban Type definiált absztrakt metódusok némelyike nem teljes mértékben implementálva van az TypeBuilder osztályban. Az ezekre a TypeBuilder metódusokra történő hívások NotSupportedException kivételt dobnak. A kívánt funkció a létrehozott típus Type.GetType vagy Assembly.GetType segítségével történő lekérésével és a lekért típus tükrözésével érhető el.