Freigeben über


System.Type.GetProperty-Methoden

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

GetProperty(String)-Methode

Bei der Suche name wird die Groß-/Kleinschreibung beachtet. Die Suche enthält öffentliche statische und öffentliche Instanzeigenschaften.

Eine Eigenschaft wird als öffentlich betrachtet, um zu reflektieren, wenn sie über mindestens einen Accessor verfügt, der öffentlich ist. Andernfalls gilt die Eigenschaft als privat, und Sie müssen die Werte in Visual Basic verwenden BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static , um sie abzurufen.Or

Wenn der aktuelle Typ einen konstruierten generischen Type Typ darstellt, gibt diese Methode die PropertyInfo durch die entsprechenden Typargumente ersetzten Typparameter zurück.

Wenn der aktuelle Type Parameter einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, durchsucht diese Methode die Eigenschaften der Klasseneinschränkung.

Situationen, in denen AmbiguousMatchException folgendes auftritt:

  • Ein Typ enthält zwei indizierte Eigenschaften, die denselben Namen haben, aber unterschiedliche Zahlen von Parametern. Verwenden Sie zum Auflösen der Mehrdeutigkeit eine Überladung der Methode, die GetProperty Parametertypen angibt.
  • Ein abgeleiteter Typ deklariert eine Eigenschaft, die eine geerbte Eigenschaft mit demselben Namen ausblendet, indem der new Modifizierer (Shadows in Visual Basic) verwendet wird. Um die Mehrdeutigkeit zu beheben, verwenden Sie die GetProperty(String, BindingFlags) Methodenüberladung, und fügen Sie das BindingFlags.DeclaredOnly Flag hinzu, um die Suche auf Elemente zu beschränken, die nicht geerbt werden.

GetProperty(String, BindingFlags)-Methode

Eine Eigenschaft wird als öffentlich betrachtet, um zu reflektieren, wenn sie über mindestens einen Accessor verfügt, der öffentlich ist. Andernfalls gilt die Eigenschaft als privat, und Sie müssen die Werte in Visual Basic verwenden BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static , um sie abzurufen.Or

Die folgenden BindingFlags Filterkennzeichnungen können verwendet werden, um zu definieren, welche Eigenschaften in die Suche einbezogen werden sollen:

  • Sie müssen entweder BindingFlags.Instance oder BindingFlags.Static angeben, um eine Rückgabe zu erhalten.
  • Geben Sie an BindingFlags.Public , dass öffentliche Eigenschaften in die Suche eingeschlossen werden sollen.
  • Geben Sie an BindingFlags.NonPublic , dass nicht öffentliche Eigenschaften (d. h. private, interne und geschützte Eigenschaften) in die Suche einbezogen werden sollen.
  • Geben Sie an BindingFlags.FlattenHierarchy , dass Elemente in die Hierarchie eingeschlossen public und protected statisch sind. private Statische Member in geerbten Klassen sind nicht enthalten.

Die folgenden BindingFlags Modifiziererkennzeichnungen können verwendet werden, um die Funktionsweise der Suche zu ändern:

  • BindingFlags.IgnoreCase die Groß-/Kleinschreibung von name.
  • BindingFlags.DeclaredOnly um nur die eigenschaften zu durchsuchen, die für die Typeeigenschaften deklariert wurden, nicht die eigenschaften, die einfach geerbt wurden.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Wenn der aktuelle Typ einen konstruierten generischen Type Typ darstellt, gibt diese Methode die PropertyInfo durch die entsprechenden Typargumente ersetzten Typparameter zurück.

Wenn der aktuelle Type Parameter einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, durchsucht diese Methode die Eigenschaften der Klasseneinschränkung.

Situationen, in denen AmbiguousMatchException folgendes auftritt:

  • Ein Typ enthält zwei indizierte Eigenschaften, die denselben Namen haben, aber unterschiedliche Zahlen von Parametern. Verwenden Sie zum Auflösen der Mehrdeutigkeit eine Überladung der Methode, die GetProperty Parametertypen angibt.
  • Ein abgeleiteter Typ deklariert eine Eigenschaft, die eine geerbte Eigenschaft mit demselben Namen unter Verwendung des new Modifizierers (Shadows in Visual Basic) ausblendet. Um die Mehrdeutigkeit zu beheben, schließen Sie BindingFlags.DeclaredOnly die Suche auf Elemente ein, die nicht geerbt werden.

GetProperty(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[])

Eine Eigenschaft wird als öffentlich betrachtet, um zu reflektieren, wenn sie über mindestens einen Accessor verfügt, der öffentlich ist. Andernfalls gilt die Eigenschaft als privat, und Sie müssen die Werte in Visual Basic verwenden BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static , um sie abzurufen.Or

Obwohl der Standardordner nicht verarbeitet ParameterModifier wird (der modifiers Parameter), können Sie die abstrakte Klasse verwenden, um einen benutzerdefinierten System.Reflection.Binder Sammelordner zu schreiben, der verarbeitet wird modifiers. ParameterModifier wird nur verwendet, wenn der Aufruf über DIE COM-Interoperabilität erfolgt, und nur Parameter, die durch Verweis übergeben werden, werden behandelt.

Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Get Methoden zurückgegeben werden, wenn sie einen Typ widerspiegeln.

Memberart Statisch Nicht statisch
Konstruktor Nein Nein
Feld Nein Ja. Ein Feld wird immer nach Name und Signatur ausgeblendet.
Ereignis Nicht zutreffend Die allgemeine Typsystemregel besteht darin, dass die Vererbung mit der der Methode identisch ist, die die Eigenschaft implementiert. Reflection behandelt Eigenschaften als Hide-by-Name-and-Signature.2
Methode Nein Ja. Eine Methode (sowohl virtuell als auch nicht virtuell) kann nach Name oder nach Name und Signatur ausgeblendet werden.
Geschachtelter Typ Nein Nein
Eigenschaft Nicht zutreffend Die allgemeine Typsystemregel besteht darin, dass die Vererbung mit der der Methode identisch ist, die die Eigenschaft implementiert. Reflection behandelt Eigenschaften als Hide-by-Name-and-Signature.2

Hinweise:

  1. Hide-by-name-and-signature berücksichtigt alle Teile der Signatur, einschließlich benutzerdefinierter Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwaltete Aufrufkonventionen. Dies ist ein binärer Vergleich.
  2. Bei Spiegelung werden Eigenschaften und Ereignisse nach Name und Signatur ausgeblendet. Wenn Sie über eine Eigenschaft mit einem Get- und einem Set-Accessor in der Basisklasse verfügen, die abgeleitete Klasse jedoch nur über einen Get-Accessor verfügt, blendet die abgeleitete Klasseneigenschaft die Basisklasseneigenschaft aus, und Sie können nicht auf den Setter der Basisklasse zugreifen.
  3. Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.

Die folgenden BindingFlags Filterkennzeichnungen können verwendet werden, um zu definieren, welche Eigenschaften in die Suche einbezogen werden sollen:

  • Sie müssen entweder BindingFlags.Instance oder BindingFlags.Static angeben, um eine Rückgabe zu erhalten.
  • Geben Sie an BindingFlags.Public , dass öffentliche Eigenschaften in die Suche eingeschlossen werden sollen.
  • Geben Sie an BindingFlags.NonPublic , dass nicht öffentliche Eigenschaften (d. h. private, interne und geschützte Eigenschaften) in die Suche einbezogen werden sollen.
  • Geben Sie an BindingFlags.FlattenHierarchy , dass Elemente in die Hierarchie eingeschlossen public und protected statisch sind. private Statische Member in geerbten Klassen sind nicht enthalten.

Die folgenden BindingFlags Modifiziererkennzeichnungen können verwendet werden, um die Funktionsweise der Suche zu ändern:

  • BindingFlags.IgnoreCase die Groß-/Kleinschreibung von name.
  • BindingFlags.DeclaredOnly um nur die eigenschaften zu durchsuchen, die für die Typeeigenschaften deklariert wurden, nicht die eigenschaften, die einfach geerbt wurden.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Wenn der aktuelle Typ einen konstruierten generischen Type Typ darstellt, gibt diese Methode die PropertyInfo durch die entsprechenden Typargumente ersetzten Typparameter zurück.

Wenn der aktuelle Type Parameter einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, durchsucht diese Methode die Eigenschaften der Klasseneinschränkung.

Indexer und Standardeigenschaften

Visual Basic, C# und C++ haben eine vereinfachte Syntax für den Zugriff auf indizierte Eigenschaften und zulassen, dass eine indizierte Eigenschaft ein Standard für den Typ ist. Wenn sich die Variable myList beispielsweise auf eine ArrayList, die Syntax myList[3] (myList(3) in Visual Basic) bezieht, ruft das Element mit dem Index von 3 ab. Sie können die Eigenschaft überladen.

In C# wird dieses Feature als Indexer bezeichnet und kann nicht anhand des Namens referenziert werden. Standardmäßig wird ein C#-Indexer in Metadaten als indizierte Eigenschaft mit dem Namen Itemangezeigt. Ein Klassenbibliotheksentwickler kann jedoch das IndexerNameAttribute Attribut verwenden, um den Namen des Indexers in den Metadaten zu ändern. Die Klasse hat z. B String . einen Indexer mit dem Namen Chars[]. Indizierte Eigenschaften, die mit anderen Sprachen als C# erstellt wurden, können auch andere Namen haben als Item.

Um zu ermitteln, ob ein Typ über eine Standardeigenschaft verfügt, verwenden Sie die GetCustomAttributes(Type, Boolean) Methode, um das DefaultMemberAttribute Attribut zu testen. Wenn der Typ hat DefaultMemberAttribute, gibt die MemberName Eigenschaft den Namen der Standardeigenschaft zurück.