Reflexe ion v .NET
Třídy v System.Reflection oboru názvů společně s System.Type, umožňují získat informace o načtených sestaveních a typy definované v nich, jako jsou třídy, rozhraní a hodnotové typy (to znamená struktury a výčty). Reflexi můžete také použít k vytvoření instancí typů za běhu a k jejich vyvolání a přístupu.
Sestavení obsahují moduly , moduly obsahují typy a typy členy. Reflexe ion poskytuje objekty, které zapouzdřují sestavení, moduly a typy. Reflexi můžete použít k dynamickému vytvoření instance typu, vytvoření vazby typu k existujícímu objektu nebo získání typu z existujícího objektu. Pak můžete vyvolat metody typu nebo získat přístup k jeho polím a vlastnostem. Mezi typické způsoby reflexe patří:
- Slouží Assembly k definování a načítání sestavení, načtení modulů uvedených v manifestu sestavení a vyhledání typu z tohoto sestavení a vytvoření instance.
- Slouží Module ke zjišťování informací, jako je sestavení, které obsahuje modul a třídy v modulu. Můžete také získat všechny globální metody nebo jiné specifické, ne-globální metody definované v modulu.
- Slouží ConstructorInfo ke zjišťování informací, jako je název, parametry, modifikátory přístupu (například
public
neboprivate
) a podrobnosti implementace (napříkladabstract
nebovirtual
) konstruktoru. GetConstructors K vyvolání konkrétního konstruktoru Type použijte metodu nebo GetConstructor metodu. - Slouží MethodInfo ke zjišťování informací, jako je název, návratový typ, parametry, modifikátory přístupu a podrobnosti implementace (například
abstract
nebovirtual
) metody. GetMethods K vyvolání konkrétní metody použijte metodu nebo GetMethod metoduType. - Slouží FieldInfo ke zjišťování informací, jako je název, modifikátory přístupu a podrobnosti implementace (například
static
) pole, a k získání nebo nastavení hodnot polí. - Slouží EventInfo ke zjišťování informací, jako je název, datový typ obslužné rutiny událostí, vlastní atributy, deklarování typu a reflektovaný typ události a přidání nebo odebrání obslužných rutin událostí.
- Slouží PropertyInfo ke zjišťování informací, jako je název, datový typ, deklarování typu, reflektovaný typ a stav jen pro čtení nebo zapisovatelný stav vlastnosti, a k získání nebo nastavení hodnot vlastností.
- Slouží ParameterInfo ke zjišťování informací, jako je název parametru, datový typ, zda je parametr vstupním nebo výstupním parametrem, a umístění parametru v podpisu metody.
- Slouží CustomAttributeData ke zjišťování informací o vlastních atributech při práci v MetadataLoadContext kontextu jen pro reflexi (.NET Framework). CustomAttributeData umožňuje zkoumat atributy bez vytváření instancí z nich.
Třídy System.Reflection.Emit oboru názvů poskytují specializovanou formu reflexe, která umožňuje vytvářet typy za běhu.
Reflexe ion lze také použít k vytvoření typů prohlížečů, které uživatelům umožňují vybrat typy a pak zobrazit informace o těchto typech.
Existují další použití k reflexi. Kompilátory pro jazyky, jako je JScript, používají reflexi k vytváření tabulek symbolů. Třídy v System.Runtime.Serialization oboru názvů používají reflexi pro přístup k datům a k určení polí, která mají být zachována. Třídy v System.Runtime.Remoting oboru názvů používají reflexi nepřímo prostřednictvím serializace.
Typy modulu runtime v reflexi
Reflexe ion poskytuje třídy, jako Type jsou a MethodInfo, představují typy, členy, parametry a další entity kódu. Pokud ale použijete reflexi, nebudete s těmito třídami pracovat přímo, z nichž většina je abstraktní (MustInherit
v jazyce Visual Basic). Místo toho pracujete s typy poskytovanými modulem CLR (Common Language Runtime).
Pokud například k získání Type objektu použijete operátor jazyka C# typeof
(GetType
v jazyce Visual Basic), je objekt skutečně objektem RuntimeType
. RuntimeType
odvozuje a Type poskytuje implementace všech abstraktních metod.
Tyto třídy modulu runtime jsou internal
(Friend
v jazyce Visual Basic). Nejsou zdokumentované odděleně od jejich základních tříd, protože jejich chování je popsáno v dokumentaci základní třídy.