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
neboBindingFlags.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čete
BindingFlags.FlattenHierarchy
, že se mají zahrnoutpublic
do hierarchieprivate
statické členy aprotected
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řípadname
.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:
- 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í.
- 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.
- 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
neboBindingFlags.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čete
BindingFlags.FlattenHierarchy
, že se mají zahrnoutpublic
do hierarchieprivate
statické členy aprotected
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řípadname
.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 myList
ArrayList, 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ž Item
a 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.