Metody System.Type.GetProperty

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

GetProperty(String) Metoda

name Hledání se rozlišují malá a velká písmena. Hledání zahrnuje vlastnosti veřejných statických instancí a veřejných instancí.

Vlastnost je považována za veřejnou pro reflexi, pokud má alespoň jednu veřejnou přístupovou metodu. 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.InstanceBindingFlags.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.

Mezi situace, ve kterých AmbiguousMatchException dochází, patří:

  • 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í GetProperty metody, která určuje typy parametrů.
  • Odvozený typ deklaruje vlastnost, která skryje zděděnou vlastnost se stejným názvem pomocí modifikátoru new (Shadows v jazyce Visual Basic). K vyřešení nejednoznačnosti použijte GetProperty(String, BindingFlags) přetížení metody a přidejte BindingFlags.DeclaredOnly příznak k omezení vyhledávání na členy, které nejsou zděděné.

GetProperty(String, BindingFlags) Metoda

Vlastnost je považována za veřejnou pro reflexi, pokud má alespoň jednu veřejnou přístupovou metodu. 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.InstanceBindingFlags.Static (v jazyce Visual Basic zkombinovat hodnoty pomocí).Or

BindingFlags Následující příznaky filtru lze použít k definování vlastností, které se mají zahrnout do hledání:

  • Chcete-li získat vrácení, je nutné zadat buď BindingFlags.Instance nebo BindingFlags.Static v zájmu získání vrácení.
  • 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četeBindingFlags.FlattenHierarchy, že se mají zahrnout public do hierarchie private statické členy a protected statické členy v zděděných třídách nejsou zahrnuté.

Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:

  • BindingFlags.IgnoreCase ignorovat případ name.
  • BindingFlags.DeclaredOnly hledat pouze vlastnosti deklarované v objektu Type, nikoli vlastnosti, které byly jednoduše zděděny.

Další informace naleznete v tématu System.Reflection.BindingFlags.

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.

Mezi situace, ve kterých AmbiguousMatchException dochází, patří:

  • 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í GetProperty metody, která určuje typy parametrů.
  • Odvozený typ deklaruje vlastnost, která skryje zděděnou vlastnost se stejným názvem pomocí new modifikátoru (Shadows v 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.ReflexeIon. BindingFlags,System. Reflexe ion. Binder,System.Type,System.Type[],System. Reflexe ion. ParametrModifier[])

Vlastnost je považována za veřejnou pro reflexi, pokud má alespoň jednu veřejnou přístupovou metodu. 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.InstanceBindingFlags.Static (v jazyce Visual Basic zkombinovat hodnoty pomocí).Or

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í prostřednictvím zprostředkovatele komunikace modelu COM a zpracovávají se pouze parametry, které jsou předány odkazem.

Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get při reflexi typu.

Typ členu staticky. Nestatický
Konstruktor No Ne
Pole No Ano. Pole je vždy skrýváno podle názvu a podpisu.
Událost Nelze použít Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe ion zpracovává vlastnosti jako hide-by-name-and-signature.2
metoda No Ano. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu.
Vnořený typ No Ne
Vlastnost Nelze použít Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe ion zpracovává vlastnosti jako hide-by-name-and-signature.2

Poznámky:

  1. Skrývání podle názvu a podpisu bere v úvahu 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í.
  2. Pro účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.
  3. Vlastní atributy nejsou součástí systému společných typů.

BindingFlags Následující příznaky filtru lze použít k definování vlastností, které se mají zahrnout do hledání:

  • Chcete-li získat vrácení, je nutné zadat buď BindingFlags.Instance nebo BindingFlags.Static v zájmu získání vrácení.
  • 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četeBindingFlags.FlattenHierarchy, že se mají zahrnout public do hierarchie private statické členy a protected statické členy v zděděných třídách nejsou zahrnuté.

Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:

  • BindingFlags.IgnoreCase ignorovat případ name.
  • BindingFlags.DeclaredOnly hledat pouze vlastnosti deklarované v objektu Type, nikoli vlastnosti, které byly jednoduše zděděny.

Další informace naleznete v tématu System.Reflection.BindingFlags.

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.

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á odkazuje na proměnnou myListArrayList, syntaxe myList[3] (myList(3) v jazyce Visual Basic) načte 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 s názvem 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, MemberName vrátí vlastnost název výchozí vlastnosti.