Freigeben über


Type.InvokeMember Methode

Definition

Ruft ein bestimmtes Element der aktuellen Typeauf.

Überlädt

Name Beschreibung
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Wenn sie in einer abgeleiteten Klasse überschrieben werden, wird das angegebene Element mithilfe der angegebenen Bindungseinschränkungen aufgerufen und die angegebene Argumentliste, Modifizierer und Kultur übereinstimmen.

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Ruft das angegebene Element mithilfe der angegebenen Bindungseinschränkungen auf und entspricht der angegebenen Argumentliste und -kultur.

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Ruft das angegebene Element mithilfe der angegebenen Bindungseinschränkungen auf und entspricht der angegebenen Argumentliste.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

Wenn sie in einer abgeleiteten Klasse überschrieben werden, wird das angegebene Element mithilfe der angegebenen Bindungseinschränkungen aufgerufen und die angegebene Argumentliste, Modifizierer und Kultur übereinstimmen.

public:
 abstract System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public abstract object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public abstract object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public abstract object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
public abstract object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public MustOverride Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

Parameter

name
String

Die Zeichenfolge, die den Namen des aufzurufenden Konstruktors, der Methode, der Eigenschaft oder des Feldelements enthält.

- oder -

Eine leere Zeichenfolge ("") zum Aufrufen des Standardelements.

- oder -

Für IDispatch Elemente, eine Zeichenfolge, die DispID darstellt, z. B. "[DispID=3]".

invokeAttr
BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird. Der Zugriff kann eine der BindingFlags Folgenden sein: Public, , NonPublic, Private, InvokeMethod, usw GetField. Der Typ des Nachschlagevorgangs muss nicht angegeben werden. Wenn der Suchtyp ausgelassen wird, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static werden sie verwendet.

binder
Binder

Ein Objekt, das eine Reihe von Eigenschaften definiert und die Bindung ermöglicht, was die Auswahl einer überladenen Methode, die Koersion von Argumenttypen und den Aufruf eines Elements durch Spiegelung umfassen kann.

- oder -

Ein Nullverweis (Nothing in Visual Basic), um die DefaultBinder zu verwenden. Beachten Sie, dass das explizite Definieren eines Binder Objekts für das erfolgreiche Aufrufen von Methodenüberladungen mit variablen Argumenten erforderlich sein kann.

target
Object

Das Objekt, für das das angegebene Element aufgerufen werden soll.

args
Object[]

Ein Array, das die Argumente enthält, die an das aufgerufene Element übergeben werden sollen.

modifiers
ParameterModifier[]

Ein Array von ParameterModifier Objekten, die die Attribute darstellen, die dem entsprechenden Element im args Array zugeordnet sind. Die zugeordneten Attribute eines Parameters werden in der Signatur des Elements gespeichert.

Der Standardbinder verarbeitet diesen Parameter nur beim Aufrufen einer COM-Komponente.

culture
CultureInfo

Das CultureInfo Objekt, das das zu verwendende Globalisierungsgebietsschema darstellt, das für gebietsschemaspezifische Konvertierungen erforderlich sein kann, z. B. das Konvertieren einer numerischen Zeichenfolge in ein Double-Objekt.

- oder -

Ein Nullverweis (Nothing in Visual Basic), um die CultureInfo des aktuellen Threads zu verwenden.

namedParameters
String[]

Ein Array, das die Namen der Parameter enthält, an die die Werte im args Array übergeben werden.

Gibt zurück

Ein Objekt, das den Rückgabewert des aufgerufenen Elements darstellt.

Implementiert

Attribute

Ausnahmen

invokeAttr enthält CreateInstance und name ist null.

args und modifiers haben nicht dieselbe Länge.

- oder -

invokeAttr ist kein gültiges BindingFlags Attribut.

- oder -

invokeAttrenthält keine der folgenden Bindungskennzeichnungen: InvokeMethod, , CreateInstance, GetField, , SetField, oder GetPropertySetProperty.

- oder -

invokeAttr enthält CreateInstance in Kombination mit InvokeMethod, , GetField, SetField, , GetPropertyoder SetProperty.

- oder -

invokeAttrenthält sowohl als SetFieldauch GetField .

- oder -

invokeAttrenthält sowohl als SetPropertyauch GetProperty .

- oder -

invokeAttr enthält InvokeMethod in Kombination mit SetField oder SetProperty.

- oder -

invokeAttr enthält SetField mehr args als ein Element.

- oder -

Das benannte Parameterarray ist größer als das Argumentarray.

- oder -

Diese Methode wird für ein COM-Objekt aufgerufen, und eines der folgenden Bindungsflags wurde nicht übergeben in: BindingFlags.InvokeMethod, , , BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyoder BindingFlags.PutRefDispProperty.

- oder -

Eines der benannten Parameterarrays enthält eine Zeichenfolge, die lautet null.

Das angegebene Element ist ein Klasseninitialisierer.

Das Feld oder die Eigenschaft kann nicht gefunden werden.

Es kann keine Methode gefunden werden, die den Argumenten in argsentspricht.

- oder -

Es kann kein Element gefunden werden, in dem die Argumentnamen angegeben sind namedParameters.

- oder -

Das aktuelle Type Objekt stellt einen Typ dar, ContainsGenericParameters der offene Typparameter enthält, d. h. gibt zurück true.

Das angegebene Element kann nicht aufgerufen werden.target

Mehrere Methoden entsprechen den Bindungskriterien.

Die dargestellte name Methode weist mindestens einen nicht angegebenen generischen Typparameter auf. Das heißt, die Eigenschaft der ContainsGenericParameters Methode gibt truezurück.

Hinweise

InvokeMember ruft ein Konstruktorelement oder ein Methodenmemememm auf, ruft ein Eigenschaftselement ab oder legt es fest, ruft ein Datenfeldelement ab oder legt es fest oder ruft ein Element eines Arraymemors ab oder legt es fest.

Hinweis

Sie können keine InvokeMember generische Methode aufrufen.

Wenn Sie ein IDispatch Element aufrufen, können Sie die DispID anstelle des Membernamens mithilfe des Zeichenfolgenformats "[DispID=##]" angeben. Wenn beispielsweise die DispID von MyComMethod 3 ist, können Sie die Zeichenfolge "[DispID=3]" anstelle von "MyComMethod" angeben. Das Aufrufen eines Elements durch DispID ist schneller als das Nachschlagen des Mitglieds anhand des Namens. In komplexen Aggregationsszenarien ist die DispID manchmal die einzige Möglichkeit, das gewünschte Element aufzurufen.

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

Jeder Parameter im namedParameters Array ruft den Wert im entsprechenden Element im args Array ab. Wenn die Länge args größer als die Länge des namedParametersArguments ist, werden die verbleibenden Argumentwerte in der reihenfolge übergeben.

Das namedParameters Array kann verwendet werden, um die Reihenfolge der Argumente in einem Eingabearray zu ändern. Wenn beispielsweise die Methode M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) und das Eingabearray { 42, "x" }, kann das Eingabearray unverändert an args übergeben werden, wenn das Array { "b", "a" } für namedParameters bereitgestellt wird.

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

  • Geben Sie an BindingFlags.Public , dass öffentliche Mitglieder in die Suche einbezogen werden sollen.

  • Geben Sie an BindingFlags.NonPublic , dass nicht öffentliche Mitglieder (d. h. private, interne und geschützte Member) in die Suche einbezogen werden sollen.

  • Geben Sie an BindingFlags.FlattenHierarchy , dass statische Elemente in die Hierarchie aufgenommen werden sollen.

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

  • BindingFlags.IgnoreCase, um die Groß- und Kleinschreibung von name zu ignorieren.

  • BindingFlags.DeclaredOnly um nur die Mitglieder zu durchsuchen, die für die TypeMitglieder deklariert sind, nicht mitglieder, die einfach geerbt wurden.

Die folgenden BindingFlags Aufrufkennzeichnungen können verwendet werden, um zu kennzeichnen, welche Aktion mit dem Mitglied ausgeführt werden soll:

  • CreateInstance um einen Konstruktor aufzurufen. name wird ignoriert. Ungültig bei anderen Aufrufkennzeichnungen.

  • InvokeMethod zum Aufrufen einer Methode, jedoch nicht eines Konstruktors oder eines Typinitialisierungsprogramms. Ungültig mit SetField oder SetProperty. Wird InvokeMethod durch sich selbst, BindingFlags.Public, BindingFlags.Instance, und BindingFlags.Static werden automatisch eingeschlossen.

  • GetField um den Wert eines Felds abzurufen. Ungültig mit SetField.

  • SetField um den Wert eines Felds festzulegen. Ungültig mit GetField.

  • GetProperty um eine Eigenschaft abzurufen. Ungültig mit SetProperty.

  • SetProperty um eine Eigenschaft festzulegen. Ungültig mit GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen erfüllt sind:

  • Die Anzahl der Parameter in der Methodendeklaration entspricht der Anzahl der Argumente im args Array (es sei denn, Standardargumente werden für das Element definiert und BindingFlags.OptionalParamBinding angegeben).

  • Der Typ der einzelnen Argumente kann vom Ordner in den Typ des Parameters konvertiert werden.

Der Sammelordner findet alle passenden Methoden. Diese Methoden werden basierend auf dem Typ der angeforderten Bindung gefunden (BindingFlags Werte InvokeMethod, GetPropertyusw.). Der Satz von Methoden wird nach dem Namen, der Anzahl der Argumente und einer Reihe von Suchmodifizierern gefiltert, die im Sammelordner definiert sind.

Nachdem die Methode ausgewählt wurde, wird sie aufgerufen. Die Barrierefreiheit wird zu diesem Zeitpunkt überprüft. Die Suche kann steuern, welche Methodengruppen auf der Grundlage des Barrierefreiheitsattributs gesucht werden, das der Methode zugeordnet ist. Die Binder.BindToMethod Methode der Binder Klasse ist für die Auswahl der aufgerufenen Methode verantwortlich. Der Standardbinder wählt die spezifischste Übereinstimmung aus.

InvokeMember kann verwendet werden, um Methoden mit Parametern mit Standardwerten aufzurufen. Um eine Bindung an diese Methoden zu erstellen, muss BindingFlags.OptionalParamBinding Reflection angegeben werden. Für einen Parameter mit einem Standardwert können Sie entweder einen anderen Wert angeben oder Missing.Value den Standardwert verwenden.

Betrachten Sie beispielsweise eine Methode wie MyMethod(int x, float y = 2,0). Um diese Methode nur mit dem ersten Argument als MyMethod(4) aufzurufen, übergeben Sie eines der obigen Bindungskennzeichnungen, und übergeben Sie zwei Argumente, nämlich 4 für das erste Argument und Missing.Value für das zweite Argument. Sofern Sie nicht verwenden Missing.Value, dürfen Sie optionale Parameter nicht mit der Invoke Methode weglassen. Verwenden Sie stattdessen, wenn Sie dies InvokeMember tun müssen.

Zugriffsbeschränkungen werden für voll vertrauenswürdigen Code ignoriert; d. h. auf private Konstruktoren, Methoden, Felder und Eigenschaften kann zugegriffen und aufgerufen System.Reflection werden, wenn der Code vollständig vertrauenswürdig ist.

Sie können ein Type.InvokeMember Feld auf einen bestimmten Wert festlegen, indem Sie angeben BindingFlags.SetField. Wenn Sie z. B. ein öffentliches Instanzfeld mit dem Namen F für Klasse C und F Stringfestlegen möchten, können Sie Code wie:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);

Wenn F ein String[]ist, können Sie Code verwenden, z. B.:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);

das Feld F in dieses neue Array initialisiert. Sie können auch Type.InvokeMember verwenden, um eine Position in einem Array festzulegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie den folgenden angeben:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);

Dadurch wird die Zeichenfolge "z" im Array geändert, das F in der Zeichenfolge "b" enthält.

Hinweis

Diese Methode kann verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer mit der ReflectionPermission Kennzeichnung erteilt ReflectionPermissionFlag.RestrictedMemberAccess wurde und wenn der Grant-Satz der nicht öffentlichen Mitglieder auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Siehe Sicherheitsüberlegungen zur Reflexion.)

Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf das .NET Framework 3.5 oder höher abzielen.

Weitere Informationen

Gilt für:

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

Ruft das angegebene Element mithilfe der angegebenen Bindungseinschränkungen auf und entspricht der angegebenen Argumentliste und -kultur.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object

Parameter

name
String

Die Zeichenfolge, die den Namen des aufzurufenden Konstruktors, der Methode, der Eigenschaft oder des Feldelements enthält.

- oder -

Eine leere Zeichenfolge ("") zum Aufrufen des Standardelements.

- oder -

Für IDispatch Elemente, eine Zeichenfolge, die DispID darstellt, z. B. "[DispID=3]".

invokeAttr
BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird. Der Zugriff kann eine der BindingFlags Folgenden sein: Public, , NonPublic, Private, InvokeMethod, usw GetField. Der Typ des Nachschlagevorgangs muss nicht angegeben werden. Wenn der Suchtyp ausgelassen wird, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static werden sie verwendet.

binder
Binder

Ein Objekt, das eine Reihe von Eigenschaften definiert und die Bindung ermöglicht, was die Auswahl einer überladenen Methode, die Koersion von Argumenttypen und den Aufruf eines Elements durch Spiegelung umfassen kann.

- oder -

Ein Nullverweis (Nothing in Visual Basic), um die DefaultBinder zu verwenden. Beachten Sie, dass das explizite Definieren eines Binder Objekts für das erfolgreiche Aufrufen von Methodenüberladungen mit variablen Argumenten erforderlich sein kann.

target
Object

Das Objekt, für das das angegebene Element aufgerufen werden soll.

args
Object[]

Ein Array, das die Argumente enthält, die an das aufgerufene Element übergeben werden sollen.

culture
CultureInfo

Das Objekt, das das zu verwendende Globalisierungsgebietsschema darstellt, das für gebietsschemaspezifische Konvertierungen erforderlich sein kann, z. B. das Konvertieren eines numerischen Gebietsschemas String in ein Double.

- oder -

Ein Nullverweis (Nothing in Visual Basic), um die CultureInfo des aktuellen Threads zu verwenden.

Gibt zurück

Ein Objekt, das den Rückgabewert des aufgerufenen Elements darstellt.

Implementiert

Attribute

Ausnahmen

invokeAttr enthält CreateInstance und name ist null.

invokeAttr ist kein gültiges BindingFlags Attribut.

- oder -

invokeAttrenthält keine der folgenden Bindungskennzeichnungen: InvokeMethod, , CreateInstance, GetField, , SetField, oder GetPropertySetProperty.

- oder -

invokeAttr enthält CreateInstance in Kombination mit InvokeMethod, , GetField, SetField, , GetPropertyoder SetProperty.

- oder -

invokeAttrenthält sowohl als SetFieldauch GetField .

- oder -

invokeAttrenthält sowohl als SetPropertyauch GetProperty .

- oder -

invokeAttr enthält InvokeMethod in Kombination mit SetField oder SetProperty.

- oder -

invokeAttr enthält SetField mehr args als ein Element.

- oder -

Diese Methode wird für ein COM-Objekt aufgerufen, und eines der folgenden Bindungsflags wurde nicht übergeben in: BindingFlags.InvokeMethod, , , BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyoder BindingFlags.PutRefDispProperty.

- oder -

Eines der benannten Parameterarrays enthält eine Zeichenfolge, die lautet null.

Das angegebene Element ist ein Klasseninitialisierer.

Das Feld oder die Eigenschaft kann nicht gefunden werden.

Es kann keine Methode gefunden werden, die den Argumenten in argsentspricht.

- oder -

Das aktuelle Type Objekt stellt einen Typ dar, ContainsGenericParameters der offene Typparameter enthält, d. h. gibt zurück true.

Das angegebene Element kann nicht aufgerufen werden.target

Mehrere Methoden entsprechen den Bindungskriterien.

Die dargestellte name Methode weist mindestens einen nicht angegebenen generischen Typparameter auf. Das heißt, die Eigenschaft der ContainsGenericParameters Methode gibt truezurück.

Hinweise

Obwohl der Standard-Binder CultureInfo (den culture Parameter) nicht verarbeitet, können Sie die abstrakte System.Reflection.Binder Klasse verwenden, um einen benutzerdefinierten Binder zu schreiben, der culture verarbeitet.

Hinweis

Sie können keine InvokeMember generische Methode aufrufen.

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

  • Geben Sie an BindingFlags.Public , dass öffentliche Mitglieder in die Suche einbezogen werden sollen.

  • Geben Sie an BindingFlags.NonPublic , dass nicht öffentliche Mitglieder (d. h. private, interne und geschützte Member) in die Suche einbezogen werden sollen.

  • Geben Sie an BindingFlags.FlattenHierarchy , dass statische Elemente in die Hierarchie aufgenommen werden sollen.

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

  • BindingFlags.IgnoreCase, um die Groß- und Kleinschreibung von name zu ignorieren.

  • BindingFlags.DeclaredOnly um nur die Mitglieder zu durchsuchen, die für die TypeMitglieder deklariert sind, nicht mitglieder, die einfach geerbt wurden.

Die folgenden BindingFlags Aufrufkennzeichnungen können verwendet werden, um zu kennzeichnen, welche Aktion mit dem Mitglied ausgeführt werden soll:

  • CreateInstance um einen Konstruktor aufzurufen. name wird ignoriert. Ungültig bei anderen Aufrufkennzeichnungen.

  • InvokeMethod zum Aufrufen einer Methode, jedoch nicht eines Konstruktors oder eines Typinitialisierungsprogramms. Ungültig mit SetField oder SetProperty. Wird InvokeMethod durch sich selbst, BindingFlags.Public, BindingFlags.Instance, und BindingFlags.Static werden automatisch eingeschlossen.

  • GetField um den Wert eines Felds abzurufen. Ungültig mit SetField.

  • SetField um den Wert eines Felds festzulegen. Ungültig mit GetField.

  • GetProperty um eine Eigenschaft abzurufen. Ungültig mit SetProperty.

  • SetProperty um eine Eigenschaft festzulegen. Ungültig mit GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen erfüllt sind:

  • Die Anzahl der Parameter in der Methodendeklaration entspricht der Anzahl der Argumente im args Array (es sei denn, Standardargumente werden für das Element definiert und BindingFlags.OptionalParamBinding angegeben).

  • Der Typ der einzelnen Argumente kann vom Ordner in den Typ des Parameters konvertiert werden.

Der Sammelordner findet alle passenden Methoden. Diese Methoden werden basierend auf dem Typ der angeforderten Bindung gefunden (BindingFlags Werte InvokeMethod, GetPropertyusw.). Der Satz von Methoden wird nach dem Namen, der Anzahl der Argumente und einer Reihe von Suchmodifizierern gefiltert, die im Sammelordner definiert sind.

Nachdem die Methode ausgewählt wurde, wird sie aufgerufen. Die Barrierefreiheit wird zu diesem Zeitpunkt überprüft. Die Suche kann steuern, welche Methodengruppen auf der Grundlage des Barrierefreiheitsattributs gesucht werden, das der Methode zugeordnet ist. Die Binder.BindToMethod Methode der Binder Klasse ist für die Auswahl der aufgerufenen Methode verantwortlich. Der Standardbinder wählt die spezifischste Übereinstimmung aus.

Zugriffsbeschränkungen werden für voll vertrauenswürdigen Code ignoriert; d. h. auf private Konstruktoren, Methoden, Felder und Eigenschaften kann über Reflection zugegriffen und aufgerufen werden, wenn der Code vollständig vertrauenswürdig ist.

Sie können ein Type.InvokeMember Feld auf einen bestimmten Wert festlegen, indem Sie angeben BindingFlags.SetField. Wenn Sie z. B. ein öffentliches Instanzfeld mit dem Namen F für Klasse C und F String festlegen möchten, können Sie Code verwenden, z. B.:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);

Wenn F ein String[]ist, können Sie Code verwenden, z. B.:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);

das Feld F in dieses neue Array initialisiert. Sie können auch Type.InvokeMember verwenden, um eine Position in einem Array festzulegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie den folgenden angeben:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);

Dadurch wird die Zeichenfolge "z" im Array geändert, das F in der Zeichenfolge "b" enthält.

Wenn Sie ein IDispatch Element aufrufen, können Sie die DispID anstelle des Membernamens mithilfe des Zeichenfolgenformats "[DispID=##]" angeben. Wenn beispielsweise die DispID von MyComMethod 3 ist, können Sie die Zeichenfolge "[DispID=3]" anstelle von "MyComMethod" angeben. Das Aufrufen eines Elements durch DispID ist schneller als das Nachschlagen des Mitglieds anhand des Namens. In komplexen Aggregationsszenarien ist die DispID manchmal die einzige Möglichkeit, das gewünschte Element aufzurufen.

Hinweis

Diese Methode kann verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer mit der ReflectionPermission Kennzeichnung erteilt ReflectionPermissionFlag.RestrictedMemberAccess wurde und wenn der Grant-Satz der nicht öffentlichen Mitglieder auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Siehe Sicherheitsüberlegungen zur Reflexion.)

Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf das .NET Framework 3.5 oder höher abzielen.

Weitere Informationen

Gilt für:

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

Ruft das angegebene Element mithilfe der angegebenen Bindungseinschränkungen auf und entspricht der angegebenen Argumentliste.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object

Parameter

name
String

Die Zeichenfolge, die den Namen des aufzurufenden Konstruktors, der Methode, der Eigenschaft oder des Feldelements enthält.

- oder -

Eine leere Zeichenfolge ("") zum Aufrufen des Standardelements.

- oder -

Für IDispatch Elemente, eine Zeichenfolge, die DispID darstellt, z. B. "[DispID=3]".

invokeAttr
BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird. Der Zugriff kann eine der BindingFlags Folgenden sein: Public, , NonPublic, Private, InvokeMethod, usw GetField. Der Typ des Nachschlagevorgangs muss nicht angegeben werden. Wenn der Suchtyp ausgelassen wird, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static werden sie verwendet.

binder
Binder

Ein Objekt, das eine Reihe von Eigenschaften definiert und die Bindung ermöglicht, was die Auswahl einer überladenen Methode, die Koersion von Argumenttypen und den Aufruf eines Elements durch Spiegelung umfassen kann.

- oder -

Ein Nullverweis (Nothing in Visual Basic), um die DefaultBinder zu verwenden. Beachten Sie, dass das explizite Definieren eines Binder Objekts für das erfolgreiche Aufrufen von Methodenüberladungen mit variablen Argumenten erforderlich sein kann.

target
Object

Das Objekt, für das das angegebene Element aufgerufen werden soll.

args
Object[]

Ein Array, das die Argumente enthält, die an das aufgerufene Element übergeben werden sollen.

Gibt zurück

Ein Objekt, das den Rückgabewert des aufgerufenen Elements darstellt.

Implementiert

Attribute

Ausnahmen

invokeAttr enthält CreateInstance und name ist null.

invokeAttr ist kein gültiges BindingFlags Attribut.

- oder -

invokeAttrenthält keine der folgenden Bindungskennzeichnungen: InvokeMethod, , CreateInstance, GetField, , SetField, oder GetPropertySetProperty.

- oder -

invokeAttr enthält CreateInstance in Kombination mit InvokeMethod, , GetField, SetField, , GetPropertyoder SetProperty.

- oder -

invokeAttrenthält sowohl als SetFieldauch GetField .

- oder -

invokeAttrenthält sowohl als SetPropertyauch GetProperty .

- oder -

invokeAttr enthält InvokeMethod in Kombination mit SetField oder SetProperty.

- oder -

invokeAttr enthält SetField mehr args als ein Element.

- oder -

Diese Methode wird für ein COM-Objekt aufgerufen, und eines der folgenden Bindungsflags wurde nicht übergeben in: BindingFlags.InvokeMethod, , , BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyoder BindingFlags.PutRefDispProperty.

- oder -

Eines der benannten Parameterarrays enthält eine Zeichenfolge, die lautet null.

Das angegebene Element ist ein Klasseninitialisierer.

Das Feld oder die Eigenschaft kann nicht gefunden werden.

Es kann keine Methode gefunden werden, die den Argumenten in argsentspricht.

- oder -

Das aktuelle Type Objekt stellt einen Typ dar, ContainsGenericParameters der offene Typparameter enthält, d. h. gibt zurück true.

Das angegebene Element kann nicht aufgerufen werden.target

Mehrere Methoden entsprechen den Bindungskriterien.

Das .NET Compact Framework unterstützt diese Methode derzeit nicht.

Die dargestellte name Methode weist mindestens einen nicht angegebenen generischen Typparameter auf. Das heißt, die Eigenschaft der ContainsGenericParameters Methode gibt truezurück.

Beispiele

Im folgenden Beispiel wird der Zugriff auf Elemente eines Typs verwendet InvokeMember .

using System;
using System.Reflection;

// This sample class has a field, constructor, method, and property.
class MyType
{
    Int32 myField;
    public MyType(ref Int32 x) {x *= 5;}
    public override String ToString() {return myField.ToString();}
    public Int32 MyProp
    {
        get {return myField;}
        set
        {
            if (value < 1)
                throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
            myField = value;
        }
    }
}

class MyApp
{
    static void Main()
    {
        Type t = typeof(MyType);
        // Create an instance of a type.
        Object[] args = new Object[] {8};
        Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
        Object obj = t.InvokeMember(null,
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
        Console.WriteLine("Type: " + obj.GetType().ToString());
        Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);

        // Read and write to a field.
        t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
        Int32 v = (Int32) t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
        Console.WriteLine("myField: " + v);

        // Call a method.
        String s = (String) t.InvokeMember("ToString",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
        Console.WriteLine("ToString: " + s);

        // Read and write a property. First, attempt to assign an
        // invalid value; then assign a valid value; finally, get
        // the value.
        try
        {
            // Assign the value zero to MyProp. The Property Set
            // throws an exception, because zero is an invalid value.
            // InvokeMember catches the exception, and throws
            // TargetInvocationException. To discover the real cause
            // you must catch TargetInvocationException and examine
            // the inner exception.
            t.InvokeMember("MyProp",
                BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
        }
        catch (TargetInvocationException e)
        {
            // If the property assignment failed for some unexpected
            // reason, rethrow the TargetInvocationException.
            if (e.InnerException.GetType() !=
                typeof(ArgumentOutOfRangeException))
                throw;
            Console.WriteLine("An invalid value was assigned to MyProp.");
        }
        t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
        v = (Int32) t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
        Console.WriteLine("MyProp: " + v);
    }
}
open System
open System.Reflection

// This sample class has a field, constructor, method, and property.
type MyType() =
    let mutable myField = 0

    member _.MyType(x: int byref) =
        x <- x * 5
    
    override _.ToString() =
        string myField
    
    member _.MyProp
        with get () = myField
        and set value =
            if value < 1 then
                raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
            myField <- value

let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."

// Read and write to a field.
t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"

// Call a method.
let s = t.InvokeMember("ToString",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"ToString: {s}"

// Read and write a property. First, attempt to assign an
// invalid value then assign a valid value finally, get
// the value.
try
    // Assign the value zero to MyProp. The Property Set
    // throws an exception, because zero is an invalid value.
    // InvokeMember catches the exception, and throws
    // TargetInvocationException. To discover the real cause
    // you must catch TargetInvocationException and examine
    // the inner exception.
    t.InvokeMember("MyProp",
        BindingFlags.DeclaredOnly |||
        BindingFlags.Public ||| BindingFlags.NonPublic |||
        BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
    // If the property assignment failed for some unexpected
    // reason, rethrow the TargetInvocationException.
    if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
        reraise ()
    printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
Imports System.Reflection

' This sample class has a field, constructor, method, and property.
Class MyType
    Private myField As Int32

    Public Sub New(ByRef x As Int32)
        x *= 5
    End Sub

    Public Overrides Function ToString() As [String]
        Return myField.ToString()
    End Function 'ToString

    Public Property MyProp() As Int32
        Get
            Return myField
        End Get
        Set(ByVal Value As Int32)
            If Value < 1 Then
                Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
            End If
            myField = Value
        End Set
    End Property
End Class

Class MyApp

    Shared Sub Main()
        Dim t As Type = GetType(MyType)
        ' Create an instance of a type.
        Dim args() As [Object] = {8}
        Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
        Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
        Console.WriteLine("Type: {0}", obj.GetType().ToString())
        Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))

        ' Read and write to a field.
        t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
        Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
        Console.WriteLine("myField: {0}", v)

        ' Call a method.
        Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
        Console.WriteLine("ToString: {0}", s)

        ' Read and write a property. First, attempt to assign an
        ' invalid value; then assign a valid value; finally, get
        ' the value.
        Try
            ' Assign the value zero to MyProp. The Property Set 
            ' throws an exception, because zero is an invalid value.
            ' InvokeMember catches the exception, and throws 
            ' TargetInvocationException. To discover the real cause
            ' you must catch TargetInvocationException and examine
            ' the inner exception. 
            t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
        Catch e As TargetInvocationException
            ' If the property assignment failed for some unexpected
            ' reason, rethrow the TargetInvocationException.
            If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
                Throw
            End If
            Console.WriteLine("An invalid value was assigned to MyProp.")
        End Try
        t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
        v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
        Console.WriteLine("MyProp: {0}", v)
    End Sub
End Class

Hinweise

Hinweis

Sie können keine InvokeMember generische Methode aufrufen.

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

  • Geben Sie an BindingFlags.Public , dass öffentliche Mitglieder in die Suche einbezogen werden sollen.

  • Geben Sie an BindingFlags.NonPublic , dass nicht öffentliche Mitglieder (d. h. private und geschützte Member) in die Suche einbezogen werden sollen.

  • Geben Sie an BindingFlags.FlattenHierarchy , dass statische Elemente in die Hierarchie aufgenommen werden sollen.

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

  • BindingFlags.IgnoreCase, um die Groß- und Kleinschreibung von name zu ignorieren.

  • BindingFlags.DeclaredOnly um nur die Mitglieder zu durchsuchen, die für die TypeMitglieder deklariert sind, nicht mitglieder, die einfach geerbt wurden.

Die folgenden BindingFlags Aufrufkennzeichnungen können verwendet werden, um zu kennzeichnen, welche Aktion mit dem Mitglied ausgeführt werden soll:

  • CreateInstance um einen Konstruktor aufzurufen. name wird ignoriert. Ungültig bei anderen Aufrufkennzeichnungen.

  • InvokeMethod zum Aufrufen einer Methode, jedoch nicht eines Konstruktors oder eines Typinitialisierungsprogramms. Ungültig mit SetField oder SetProperty. Wird InvokeMethod durch sich selbst, BindingFlags.Public, BindingFlags.Instance, und BindingFlags.Static werden automatisch eingeschlossen.

  • GetField um den Wert eines Felds abzurufen. Ungültig mit SetField.

  • SetField um den Wert eines Felds festzulegen. Ungültig mit GetField.

  • GetProperty um eine Eigenschaft abzurufen. Ungültig mit SetProperty.

  • SetProperty um eine Eigenschaft festzulegen. Ungültig mit GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen erfüllt sind:

  • Die Anzahl der Parameter in der Methodendeklaration entspricht der Anzahl der Argumente im args Array (es sei denn, Standardargumente werden für das Element definiert und BindingFlags.OptionalParamBinding angegeben).

  • Der Typ der einzelnen Argumente kann vom Ordner in den Typ des Parameters konvertiert werden.

Der Sammelordner findet alle passenden Methoden. Diese Methoden werden basierend auf dem Typ der angeforderten Bindung gefunden (BindingFlags Werte InvokeMethod, GetPropertyusw.). Der Satz von Methoden wird nach dem Namen, der Anzahl der Argumente und einer Reihe von Suchmodifizierern gefiltert, die im Sammelordner definiert sind.

Nachdem die Methode ausgewählt wurde, wird sie aufgerufen. Die Barrierefreiheit wird zu diesem Zeitpunkt überprüft. Die Suche kann steuern, welche Methodengruppen auf der Grundlage des Barrierefreiheitsattributs gesucht werden, das der Methode zugeordnet ist. Die Binder.BindToMethod Methode der Binder Klasse ist für die Auswahl der aufgerufenen Methode verantwortlich. Der Standardbinder wählt die spezifischste Übereinstimmung aus.

Zugriffsbeschränkungen werden für voll vertrauenswürdigen Code ignoriert; d. h. auf private Konstruktoren, Methoden, Felder und Eigenschaften kann zugegriffen und aufgerufen System.Reflection werden, wenn der Code vollständig vertrauenswürdig ist.

Sie können ein Type.InvokeMember Feld auf einen bestimmten Wert festlegen, indem Sie angeben BindingFlags.SetField. Wenn Sie z. B. ein öffentliches Instanzfeld mit dem Namen F für Klasse C und F Stringfestlegen möchten, können Sie Code wie:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});

Wenn F ein String[]ist, können Sie Code verwenden, z. B.:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});

das Feld F in dieses neue Array initialisiert. Sie können auch Type.InvokeMember verwenden, um eine Position in einem Array festzulegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie den folgenden angeben:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});

Dadurch wird die Zeichenfolge "z" im Array geändert, das F in der Zeichenfolge "b" enthält.

Wenn Sie ein IDispatch Element aufrufen, können Sie die DispID anstelle des Membernamens mithilfe des Zeichenfolgenformats "[DispID=##]" angeben. Wenn beispielsweise die DispID von MyComMethod 3 ist, können Sie die Zeichenfolge "[DispID=3]" anstelle von "MyComMethod" angeben. Das Aufrufen eines Elements durch DispID ist schneller als das Nachschlagen des Mitglieds anhand des Namens. In komplexen Aggregationsszenarien ist die DispID manchmal die einzige Möglichkeit, das gewünschte Element aufzurufen.

Hinweis

Diese Methode kann verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer mit der ReflectionPermission Kennzeichnung erteilt ReflectionPermissionFlag.RestrictedMemberAccess wurde und wenn der Grant-Satz der nicht öffentlichen Mitglieder auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Siehe Sicherheitsüberlegungen zur Reflexion.)

Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher abzielen.

Weitere Informationen

Gilt für: