Metody System.Type.GetProperty
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
GetProperty(String) Metoda
Wyszukiwanie name
uwzględnia wielkość liter. Wyszukiwanie uwzględnia właściwości wystąpienia statycznego publicznego i publicznego.
Właściwość jest uważana za publiczne odbicie, jeżeli ma co najmniej jeden publiczny akcesor. W przeciwnym razie właściwość jest uznawana za prywatną i należy jej użyć BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (w języku Visual Basic połącz wartości przy użyciu metody Or
), aby ją pobrać.
Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca PropertyInfo parametr z parametrami typu zastąpionymi przez odpowiednie argumenty typu.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda wyszukuje właściwości ograniczenia klasy.
Sytuacje, w których AmbiguousMatchException występują następujące sytuacje:
- Typ zawiera dwie właściwości indeksowane, które mają taką samą nazwę, ale różne liczby parametrów. Aby rozwiązać niejednoznaczność, użyj przeciążenia GetProperty metody, która określa typy parametrów.
- Typ pochodny deklaruje właściwość, która ukrywa dziedziczona właściwość o tej samej nazwie przy użyciu
new
modyfikatora (Shadows
w Visual Basic). Aby rozwiązać niejednoznaczność, użyj GetProperty(String, BindingFlags) przeciążenia metody i dodaj flagę BindingFlags.DeclaredOnly , aby ograniczyć wyszukiwanie do elementów członkowskich, które nie są dziedziczone.
GetProperty(String, BindingFlags) Metoda
Właściwość jest uważana za publiczne odbicie, jeżeli ma co najmniej jeden publiczny akcesor. W przeciwnym razie właściwość jest uznawana za prywatną i należy jej użyć BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (w języku Visual Basic połącz wartości przy użyciu metody Or
), aby ją pobrać.
Następujące BindingFlags flagi filtru mogą służyć do definiowania właściwości do uwzględnienia w wyszukiwaniu:
- Musisz określić wartość
BindingFlags.Instance
lubBindingFlags.Static
w celu uzyskania zwrotu. - Określ
BindingFlags.Public
, aby uwzględnić właściwości publiczne w wyszukiwaniu. - Określ
BindingFlags.NonPublic
, aby uwzględnić właściwości inne niż publiczne (czyli właściwości prywatne, wewnętrzne i chronione) w wyszukiwaniu. - Określ
BindingFlags.FlattenHierarchy
, aby uwzględnićpublic
iprotected
statyczne elementy członkowskie w hierarchii;private
składowe statyczne w klasach dziedziczych nie są uwzględniane.
Następujące BindingFlags flagi modyfikatora mogą służyć do zmiany sposobu działania wyszukiwania:
BindingFlags.IgnoreCase
aby zignorować przypadek .name
BindingFlags.DeclaredOnly
aby wyszukać tylko właściwości zadeklarowane w Typeobiekcie , a nie właściwości, które zostały po prostu odziedziczone.
Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.
Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca PropertyInfo parametr z parametrami typu zastąpionymi przez odpowiednie argumenty typu.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda wyszukuje właściwości ograniczenia klasy.
Sytuacje, w których AmbiguousMatchException występują następujące sytuacje:
- Typ zawiera dwie właściwości indeksowane, które mają taką samą nazwę, ale różne liczby parametrów. Aby rozwiązać niejednoznaczność, użyj przeciążenia GetProperty metody, która określa typy parametrów.
- Typ pochodny deklaruje właściwość, która ukrywa dziedziczona właściwość o tej samej nazwie przy użyciu
new
modyfikatora (Shadows
w Visual Basic). Aby rozwiązać niejednoznaczność, należy uwzględnić BindingFlags.DeclaredOnly ograniczenie wyszukiwania do elementów członkowskich, które nie są dziedziczone.
GetProperty(System.String,System.EmocjeJonów. BindingFlags, System. Emocje ion. Binder,System.Type,System.Type[],System. Emocje ion. ParametrModyfikator[])
Właściwość jest uważana za publiczne odbicie, jeżeli ma co najmniej jeden publiczny akcesor. W przeciwnym razie właściwość jest uznawana za prywatną i należy jej użyć BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static (w języku Visual Basic połącz wartości przy użyciu metody Or
), aby ją pobrać.
Mimo że domyślny binder nie przetwarza ParameterModifier (parametr), modifiers
można użyć klasy abstrakcyjnej System.Reflection.Binder , aby napisać niestandardowy binder, który przetwarza modifiers
. ParameterModifier
Jest używany tylko podczas wywoływania międzyoperacyjności modelu COM i obsługiwane są tylko parametry przekazywane przez odwołanie.
W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get
metody podczas odzwierciedlania typu.
Typ elementu członkowskiego | Static | Niestatyczna |
---|---|---|
Konstruktor | Nie | Nie. |
Pole | Nie. | Tak. Pole jest zawsze ukryte przez nazwę i podpis. |
Wydarzenie | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Emocje ion traktuje właściwości jako hide-by-name-and-signature.2 |
Metoda | Nie. | Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis. |
Typu zagnieżdżony | Nie | Nie. |
Właściwości | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Emocje ion traktuje właściwości jako hide-by-name-and-signature.2 |
Uwagi:
- Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.
- W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.
- Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.
Następujące BindingFlags flagi filtru mogą służyć do definiowania właściwości do uwzględnienia w wyszukiwaniu:
- Musisz określić wartość
BindingFlags.Instance
lubBindingFlags.Static
w celu uzyskania zwrotu. - Określ
BindingFlags.Public
, aby uwzględnić właściwości publiczne w wyszukiwaniu. - Określ
BindingFlags.NonPublic
, aby uwzględnić właściwości inne niż publiczne (czyli właściwości prywatne, wewnętrzne i chronione) w wyszukiwaniu. - Określ
BindingFlags.FlattenHierarchy
, aby uwzględnićpublic
iprotected
statyczne elementy członkowskie w hierarchii;private
składowe statyczne w klasach dziedziczych nie są uwzględniane.
Następujące BindingFlags flagi modyfikatora mogą służyć do zmiany sposobu działania wyszukiwania:
BindingFlags.IgnoreCase
aby zignorować przypadek .name
BindingFlags.DeclaredOnly
aby wyszukać tylko właściwości zadeklarowane w Typeobiekcie , a nie właściwości, które zostały po prostu odziedziczone.
Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.
Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca PropertyInfo parametr z parametrami typu zastąpionymi przez odpowiednie argumenty typu.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda wyszukuje właściwości ograniczenia klasy.
Indeksatory i właściwości domyślne
Język Visual Basic, C# i C++ mają uproszczoną składnię uzyskiwania dostępu do indeksowanych właściwości i umożliwiają domyślne używanie jednej indeksowanej właściwości dla jej typu. Jeśli na przykład zmienna myList
odwołuje się do zmiennej ArrayList, składnia myList[3]
(myList(3)
w Visual Basic) pobiera element z indeksem 3. Można doprowadzić do przeciążenia właściwości.
W języku C#ta funkcja jest nazywana indeksatorem i nie może być odwoływała się do nazwy. Domyślnie indeksator języka C# jest wyświetlany w metadanych jako właściwość indeksowana o nazwie Item
. Jednak deweloper biblioteki klas może użyć atrybutu IndexerNameAttribute , aby zmienić nazwę indeksatora w metadanych. Na przykład String klasa ma indeksator o nazwie Chars[]. Indeksowane właściwości utworzone przy użyciu języków innych niż C# mogą mieć nazwy inne niż Item
, jak również.
Aby określić, czy typ ma właściwość domyślną, użyj GetCustomAttributes(Type, Boolean) metody do przetestowania atrybutu DefaultMemberAttribute . Jeśli typ ma DefaultMemberAttributewartość , MemberName właściwość zwraca nazwę właściwości domyślnej.