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.
Následující pokyny platí pro všechna přetížení:
- Vlastnost je považována za veřejnou pro reflexi, pokud má alespoň jeden přístup, který je veřejný. V opačném případě je vlastnost považována za soukromou a k jejímu získání je nutné použít BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (v jazyce Visual Basic zkombinovat hodnoty pomocí).
Or - Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí PropertyInfo s parametry typu nahrazené odpovídajícími argumenty typu.
- Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda hledá vlastnosti omezení třídy.
metoda GetProperty(String)
Hledání pro name rozlišuje malá a velká písmena. Hledání obsahuje veřejné statické a veřejné vlastnosti instance.
Situace, ve kterých nastává AmbiguousMatchException, zahrnují:
- Typ obsahuje dvě indexované vlastnosti, které mají stejný název, ale různá čísla parametrů. K vyřešení nejednoznačnosti použijte přetížení metody GetProperty, které určuje typy parametrů.
- Odvozený typ deklaruje vlastnost, která skryje zděděnou vlastnost se stejným názvem pomocí modifikátoru
new(Shadowsv jazyce Visual Basic). K vyřešení nejednoznačnosti použijte přetížení metody GetProperty(String, BindingFlags) a přidejte příznak BindingFlags.DeclaredOnly k omezení vyhledávání na členy, které nejsou děděné.
metoda GetProperty(String, BindingFlags)
BindingFlags Následující příznaky filtru lze použít k definování vlastností, které se mají zahrnout do hledání:
- Abyste získali vrácení, je nutné zadat buď
BindingFlags.InstanceneboBindingFlags.Static. - Zadejte
BindingFlags.Public, aby se do hledání zahrnuly veřejné vlastnosti. - Zadejte
BindingFlags.NonPublic, aby se do hledání zahrnuly neveřejné vlastnosti (tj. soukromé, interní a chráněné vlastnosti). - Určete
BindingFlags.FlattenHierarchy, aby se zahrnulypublicaprotectedstatické členy v hierarchii; aleprivatestatické členy v zděděných třídách nejsou zahrnuty.
Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:
-
BindingFlags.IgnoreCaseignorovat případname. -
BindingFlags.DeclaredOnlyhledat pouze vlastnosti deklarované v objektu Type, nikoli vlastnosti, které byly jednoduše zděděny.
Situace, ve kterých nastává AmbiguousMatchException, zahrnují:
- Typ obsahuje dvě indexované vlastnosti, které mají stejný název, ale různá čísla parametrů. K vyřešení nejednoznačnosti použijte přetížení metody GetProperty, které určuje typy parametrů.
- Odvozený typ deklaruje vlastnost, která skryje zděděnou vlastnost se stejným názvem pomocí
newmodifikátoru (Shadowsv jazyce Visual Basic). Chcete-li vyřešit nejednoznačnost, zahrňte BindingFlags.DeclaredOnly omezení vyhledávání na členy, které nejsou zděděné.
GetProperty(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Type, System.Type[], System.Reflection.ParameterModifier[]) metoda
I když výchozí pořadač nezpracovává ParameterModifier ( modifiers parametr), můžete použít abstraktní System.Reflection.Binder třídu k zápisu vlastního pořadače, který zpracovává modifiers.
ParameterModifier se používá pouze při volání přes COM interop a jsou zpracovávány pouze parametry předané odkazem.
Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get při reflexi typu.
| Typ členu | Statický. | Nestatické |
|---|---|---|
| Konstruktor | Ne | Ne |
| Obor | Ne | Ano. Pole se vždy skryje podle názvu a signatury. |
| Událost | Není relevantní | Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe zachází s vlastnostmi jako se skrýváním podle názvu a podpisu. 2 |
| Metoda | Ne | Ano. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu. |
| Vnořený typ | Ne | Ne |
| Vlastnictví | Není relevantní | Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe zachází s vlastnostmi jako se skrýváním podle názvu a podpisu. 2 |
Poznámky:
- Funkce skrytí podle jména a podpisu zohledňuje všechny části podpisu, včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.
- Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.
- Vlastní atributy nejsou součástí systému běžných typů.
BindingFlags Následující příznaky filtru lze použít k definování vlastností, které se mají zahrnout do hledání:
- Abyste získali vrácení, je nutné zadat buď
BindingFlags.InstanceneboBindingFlags.Static. - Zadejte
BindingFlags.Public, aby se do hledání zahrnuly veřejné vlastnosti. - Zadejte
BindingFlags.NonPublic, aby se do hledání zahrnuly neveřejné vlastnosti (tj. soukromé, interní a chráněné vlastnosti). - Určete
BindingFlags.FlattenHierarchy, aby se zahrnulypublicaprotectedstatické členy v hierarchii; aleprivatestatické členy v zděděných třídách nejsou zahrnuty.
Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:
-
BindingFlags.IgnoreCaseignorovat případname. -
BindingFlags.DeclaredOnlyhledat pouze vlastnosti deklarované v objektu Type, nikoli vlastnosti, které byly jednoduše zděděny.
Indexery a výchozí vlastnosti
Jazyk Visual Basic, C# a C++ mají zjednodušenou syntaxi pro přístup k indexovaným vlastnostem a umožňují, aby jedna indexovaná vlastnost byla výchozím nastavením pro jeho typ. Pokud například proměnná myList odkazuje na ArrayList, syntaxe myList[3] (myList(3) v jazyce Visual Basic) získá prvek s indexem 3. Vlastnost můžete přetížit.
V jazyce C# se tato funkce nazývá indexer a nemůže být odkazována podle názvu. Ve výchozím nastavení se indexer jazyka C# zobrazí v metadatech jako indexovaná vlastnost s názvem Item. Vývojář knihovny tříd však může pomocí IndexerNameAttribute atributu změnit název indexeru v metadatech. Třída má například String indexer pojmenovaný Chars[]. Indexované vlastnosti vytvořené pomocí jiných jazyků než C# můžou mít jiné názvy než Itema také.
Chcete-li zjistit, zda typ má výchozí vlastnost, použijte metodu GetCustomAttributes(Type, Boolean) k otestování atributu DefaultMemberAttribute . Pokud typ obsahuje DefaultMemberAttribute, vlastnost MemberName vrátí název výchozí vlastnosti.