Type.InvokeMember Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 vonnamezu ignorieren.BindingFlags.DeclaredOnlyum 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:
CreateInstanceum einen Konstruktor aufzurufen.namewird ignoriert. Ungültig bei anderen Aufrufkennzeichnungen.InvokeMethodzum Aufrufen einer Methode, jedoch nicht eines Konstruktors oder eines Typinitialisierungsprogramms. Ungültig mitSetFieldoderSetProperty. WirdInvokeMethoddurch sich selbst,BindingFlags.Public,BindingFlags.Instance, undBindingFlags.Staticwerden automatisch eingeschlossen.GetFieldum den Wert eines Felds abzurufen. Ungültig mitSetField.SetFieldum den Wert eines Felds festzulegen. Ungültig mitGetField.GetPropertyum eine Eigenschaft abzurufen. Ungültig mitSetProperty.SetPropertyum eine Eigenschaft festzulegen. Ungültig mitGetProperty.
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
argsArray (es sei denn, Standardargumente werden für das Element definiert undBindingFlags.OptionalParamBindingangegeben).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
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
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 vonnamezu ignorieren.BindingFlags.DeclaredOnlyum 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:
CreateInstanceum einen Konstruktor aufzurufen.namewird ignoriert. Ungültig bei anderen Aufrufkennzeichnungen.InvokeMethodzum Aufrufen einer Methode, jedoch nicht eines Konstruktors oder eines Typinitialisierungsprogramms. Ungültig mitSetFieldoderSetProperty. WirdInvokeMethoddurch sich selbst,BindingFlags.Public,BindingFlags.Instance, undBindingFlags.Staticwerden automatisch eingeschlossen.GetFieldum den Wert eines Felds abzurufen. Ungültig mitSetField.SetFieldum den Wert eines Felds festzulegen. Ungültig mitGetField.GetPropertyum eine Eigenschaft abzurufen. Ungültig mitSetProperty.SetPropertyum eine Eigenschaft festzulegen. Ungültig mitGetProperty.
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
argsArray (es sei denn, Standardargumente werden für das Element definiert undBindingFlags.OptionalParamBindingangegeben).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
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
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 vonnamezu ignorieren.BindingFlags.DeclaredOnlyum 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:
CreateInstanceum einen Konstruktor aufzurufen.namewird ignoriert. Ungültig bei anderen Aufrufkennzeichnungen.InvokeMethodzum Aufrufen einer Methode, jedoch nicht eines Konstruktors oder eines Typinitialisierungsprogramms. Ungültig mitSetFieldoderSetProperty. WirdInvokeMethoddurch sich selbst,BindingFlags.Public,BindingFlags.Instance, undBindingFlags.Staticwerden automatisch eingeschlossen.GetFieldum den Wert eines Felds abzurufen. Ungültig mitSetField.SetFieldum den Wert eines Felds festzulegen. Ungültig mitGetField.GetPropertyum eine Eigenschaft abzurufen. Ungültig mitSetProperty.SetPropertyum eine Eigenschaft festzulegen. Ungültig mitGetProperty.
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
argsArray (es sei denn, Standardargumente werden für das Element definiert undBindingFlags.OptionalParamBindingangegeben).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
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission