Sdílet prostřednictvím


Reflexe 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, k jejich vyvolání a přístupu k nim.

Sestavení obsahují moduly , moduly obsahují typy a typy členy. Reflexe 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é použití 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 nebo private) a podrobnosti implementace (například abstract nebo virtual) konstruktoru. Pro použití konkrétního konstruktoru použijte metodu GetConstructors nebo GetConstructorType.
  • 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 nebo virtual) metody. Použijte metodu GetMethods nebo GetMethod objektu Type k vyvolání konkrétní metody.
  • 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.
  • Použijte CustomAttributeData ke zjištění informací o vlastních atributech při práci v MetadataLoadContext kontextu pouze 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 programu.

Reflexi 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 jmenném prostoru používají reflexi nepřímo prostřednictvím serializace.

Typy modulu runtime v reflexi

Reflexe poskytuje třídy, například Type a MethodInfo, pro reprezentaci typů, členů, parametrů a dalších entit 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í typeof objektu použijete operátor jazyka C# GetType (Typev jazyce Visual Basic), je objekt skutečně objektem RuntimeType. RuntimeType se odvozuje z Type a zajišťuje 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.

Odkazy