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 lub BindingFlags.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 i protected 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.IgnoreCaseaby 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:

  1. 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.
  2. 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.
  3. 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 lub BindingFlags.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 i protected 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.IgnoreCaseaby 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.