Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
TypeBuilder je kořenová třída používaná k řízení vytváření dynamických tříd v modulu runtime. Poskytuje sadu rutin, které se používají k definování tříd, přidání metod a polí a vytvoření třídy uvnitř modulu. Novou TypeBuilder lze vytvořit z dynamického modulu voláním ModuleBuilder.DefineType metody, která vrací TypeBuilder objekt.
Generování reflexe poskytuje následující možnosti pro definování typů:
- Definujte třídu nebo rozhraní s daným názvem.
- Definujte třídu nebo rozhraní s daným názvem a atributy.
- Definujte třídu s daným názvem, atributy a základní třídou.
- Definujte třídu s daným názvem, atributy, základní třídou a sadou rozhraní, která třída implementuje.
- Definujte třídu s daným názvem, atributy, základní třídou a velikostí balení.
- Definujte třídu s daným názvem, atributy, základní třídou a velikostí třídy jako celku.
- Definujte třídu s daným názvem, atributy, základní třídou, velikostí balení a velikostí třídy jako celku.
Chcete-li vytvořit typ pole, typ ukazatele nebo typ byref pro neúplný typ, který je reprezentován objektemTypeBuilder, použijte metodu, MakeArrayType metodu MakePointerType nebo MakeByRefType metodu v uvedeném pořadí.
Než se použije typ, musí být metoda TypeBuilder.CreateType zavolána. CreateType dokončí vytvoření typu. Po volání CreateType může volající vytvořit instanci typu pomocí Activator.CreateInstance metody a vyvolat členy typu pomocí Type.InvokeMember metody. Jedná se o jasně nesprávné volání metod, které poté, co bylo zavoláno CreateType, změní implementaci typu. Modul CLR (Common Language Runtime) například vyvolá výjimku, pokud se volající pokusí přidat nové členy do typu.
Inicializátor třídy je vytvořen pomocí TypeBuilder.DefineTypeInitializer metody. DefineTypeInitializer vrátí ConstructorBuilder objekt.
Vnořené typy jsou definovány voláním jedné z TypeBuilder.DefineNestedType metod.
Atributy
Třída TypeBuilder pomocí výčtu TypeAttributes dále specifikuje vlastnosti typu, který se má vytvořit:
- Rozhraní jsou určena pomocí atributů TypeAttributes.Interface a TypeAttributes.Abstract.
- Konkrétní třídy (třídy, které nelze rozšířit) jsou zadány pomocí atributu TypeAttributes.Sealed .
- Viditelnost typu určuje několik atributů. Podívejte se na popis výčtu TypeAttributes .
- Pokud TypeAttributes.SequentialLayout je zadán, zavaděč tříd vyloží pole v pořadí, v jakém se čtou z metadat. Zavaděč tříd považuje zadanou velikost balení, ale ignoruje všechny zadané posuny polí. Metadata zachová pořadí, ve kterém se vygenerují definice polí. I při sloučení nebudou metadata měnit pořadí definic polí. Zavaděč bude respektovat zadané posuny polí pouze v případě, že TypeAttributes.ExplicitLayout je zadán.
Známé problémy
- Reflexní generování neověřuje, zda neabstraktní třída, která implementuje rozhraní, implementovala všechny metody deklarované v rozhraní. Pokud však třída neimplementuje všechny metody deklarované v rozhraní, modul runtime nenačte třídu.
- Ačkoli TypeBuilder je odvozen z Type, některé z abstraktních metod definovaných ve třídě Type nejsou plně implementovány ve třídě TypeBuilder. Volání těchto TypeBuilder metod vyvolá NotSupportedException výjimku. Požadovanou funkčnost lze získat načtením vytvořeného typu pomocí Type.GetType nebo Assembly.GetType a aplikací reflexe na načtený typ.