Type.InvokeMember Methode

Definition

Ruft einen bestimmten Member vom aktuellen Type auf.

Überlädt

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

Ruft nach Überschreiben in einer abgeleiteten Klasse den angegebenen Member auf, der den angegebenen Bindungseinschränkungen sowie der angegebenen Argumentliste, den Modifizierern und der Kultur entspricht.

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen sowie der angegebenen Argumentliste und Kultur entspricht.

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen und der angegebenen Argumentliste entspricht.

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

Ruft nach Überschreiben in einer abgeleiteten Klasse den angegebenen Member auf, der den angegebenen Bindungseinschränkungen sowie der angegebenen Argumentliste, den Modifizierern und der Kultur entspricht.

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);
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);
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 Konstruktors, der Methode, der Eigenschaft oder des Feldmembers enthält, der bzw. die aufgerufen werden soll.

- oder - Eine leere Zeichenfolge ("") zum Aufrufen des Standardmembers.

  • oder - Für IDispatch-Member eine Zeichenfolge, die 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 aus einem der BindingFlags wie Public, NonPublic, Private, InvokeMethod, GetField usw. bestehen. Die Art der Suche muss nicht angegeben werden. Wenn die Art der Suche nicht angegeben ist, werden BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static verwendet.

binder
Binder

Ein Objekt, das eine Gruppe von Eigenschaften definiert und eine Bindung ermöglicht. Dazu kann die Auswahl einer überladenen Methode, die Umwandlung von Argumenttypen und der Aufruf eines Members durch Reflektion gehören.

- oder - Ein Nullverweis (Nothing in Visual Basic), wenn DefaultBinder verwendet werden soll. Beachten Sie, dass möglicherweise ein Binder-Objekt explizit definiert werden muss, um erfolgreich Methodenüberladungen mit Variablenargumenten aufrufen zu können.

target
Object

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

args
Object[]

Ein Array mit den Argumenten, die dem aufzurufenden Member übergeben werden sollen.

modifiers
ParameterModifier[]

Ein Array von ParameterModifier-Objekten, die die Attribute darstellen, die dem entsprechenden Element im args-Array zugeordnet sind. Die einem Parameter zugeordneten Attribute werden in der Signatur des Members gespeichert.

Der Standardbinder verarbeitet diesen Parameter nur, wenn eine COM-Komponente aufgerufen wird.

culture
CultureInfo

Das CultureInfo-Objekt, das das zu verwendende Globalisierungsgebietsschema darstellt, das für gebietsspezifische Konvertierungen wie die Konvertierung einer numerischen Zeichenfolge in einen Double erforderlich sein kann.

- oder - Ein Nullverweis (Nothing in Visual Basic), wenn die CultureInfo des aktuellen Threads verwendet werden soll.

namedParameters
String[]

Ein Array mit den Namen der Parameter, an die die Elemente des args-Arrays übergeben werden.

Gibt zurück

Object

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

Implementiert

Ausnahmen

invokeAttr enthält keine CreateInstance, und name ist null.

args und modifiers weisen nicht die gleiche Länge auf.

- oder - invokeAttr ist kein gültiges BindingFlags -Attribut.

- oder - invokeAttr enthält keines der folgenden Bindungsflags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty oder SetProperty.

- oder - invokeAttr enthält CreateInstance in Kombination mit InvokeMethod, GetField, SetField, GetProperty oder SetProperty.

- oder - invokeAttr enthält sowohl GetField als auch SetField.

- oder - invokeAttr enthält sowohl GetProperty als auch SetProperty.

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

  • oder - invokeAttr enthält SetField, und args enthält mehr 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: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty oder BindingFlags.PutRefDispProperty.

  • oder - Eines der benannten Parameterarrays enthält eine Zeichenfolge, die null ist.

Der angegebene Member ist ein Klasseninitialisierer.

Das Feld oder die Eigenschaft wurde nicht gefunden.

Es wurde keine Methode gefunden, die den Argumenten in args entspricht.

- oder - Es wurde kein Member gefunden, dessen Argumentnamen in namedParameters angegeben sind.

- oder - Das aktuelle Type-Objekt stellt einen Typ dar, der offene Typparameter enthält. Das bedeutet, dass ContainsGenericParameters den Wert true zurückgibt.

Der angegebene Member kann nicht für target aufgerufen werden.

Mehrere Methoden entsprechen den Bindungskriterien.

Die durch name dargestellte Methode enthält mindestens einen nicht angegebenen generischen Typparameter. Das bedeutet, dass die ContainsGenericParameters-Eigenschaft der Methode true zurückgibt.

Hinweise

InvokeMember ruft ein Konstruktorelement oder ein Methodenelement ab, ruft ein Eigenschaftselement ab, ruft ein Datenfeldelement ab oder legt ein Element eines Arrayelements ab oder legt dieses 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 Mitglieds durch DispID ist schneller als das Nachschlagen des Mitglieds nach Namen. In komplexen Aggregationsszenarien ist die DispID manchmal die einzige Möglichkeit, das gewünschte Element aufzurufen.

Obwohl der Standardbinder nicht verarbeitet ParameterModifier wird oder CultureInfo (die und culture die modifiers Parameter), können Sie die abstrakte System.Reflection.Binder Klasse verwenden, um einen benutzerdefinierten Ordner zu schreiben, der verarbeitet und verarbeitet modifiers wirdculture. ParameterModifier wird nur beim Aufrufen durch COM-Interop verwendet, und nur Parameter, die durch Verweis übergeben werden, werden behandelt.

Jeder Parameter im namedParameters-Array ruft den Wert im entsprechenden Element im args-Array ab. Wenn die Länge von args größer als die Länge von namedParameters ist, werden die restlichen Argumentwerte in der Reihenfolge übergeben.

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

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

  • Geben Sie BindingFlags.Public an, öffentliche Mitglieder in die Suche einzuschließen.

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

  • Geben Sie BindingFlags.FlattenHierarchy an, statische Elemente in die Hierarchie einzuschließen.

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

  • BindingFlags.IgnoreCase um den Fall von name.

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

Die folgenden BindingFlags Aufrufflaggen 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, aber nicht eines Konstruktors oder eines Typinitializers. Ungültig mit SetField oder SetProperty. Wenn InvokeMethod sie selbst angegeben wird, BindingFlags.Public``BindingFlags.Instancewerden sie BindingFlags.Static 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 so legen Sie eine Eigenschaft fest. Ungültig mit GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen wahr 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 durch den Ordner in den Typ des Parameters konvertiert werden.

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

Nachdem die Methode ausgewählt wurde, wird sie aufgerufen. Die Barrierefreiheit wird an diesem Punkt überprüft. Die Suche kann steuern, welche Methodensätze basierend auf dem Barrierefreiheitsattribute, das der Methode zugeordnet ist, durchsucht werden. Die Binder.BindToMethod Methode der Binder Klasse ist dafür verantwortlich, die aufgerufene Methode auszuwählen. Der Standardbinder wählt die spezifischste Übereinstimmung aus.

InvokeMember kann verwendet werden, um Methoden mit Parametern mit Standardwerten aufzurufen. Um an diese Methoden zu binden, 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.

Ziehen Sie beispielsweise eine Methode wie MyMethod(int x, float y = 2.0) in Betracht. Wenn Sie diese Methode nur mit dem ersten Argument als MyMethod(4) aufrufen möchten, ü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. Es sei denn, Sie verwenden Missing.Value, sie dürfen keine optionalen Parameter mit der Invoke Methode weglassen. Verwenden Sie InvokeMember stattdessen, wenn Sie dies tun müssen.

Zugriffsbeschränkungen werden für vollständig vertrauenswürdigen Code ignoriert; das heißt, 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 verwenden Type.InvokeMember , um ein Feld auf einen bestimmten Wert festzulegen, indem Sie angeben BindingFlags.SetField. Wenn Sie z. B. ein öffentliches Instanzfeld mit dem Namen F für Klasse C festlegen möchten, und F ist ein String, 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. Folgendes:

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

das Feld F für dieses neue Array initialisiert. Sie können auch Type.InvokeMember eine Position in einem Array festlegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie 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

Ab dem .NET Framework 2.0 Service Pack 1 kann diese Methode verwendet werden, um auf nicht öffentliche Mitglieder zuzugreifen, wenn der Aufrufer mit dem ReflectionPermissionFlag.RestrictedMemberAccess Flag erteilt ReflectionPermission wurde und wenn der Grantsatz der nicht öffentlichen Mitglieder auf den Erteilungssatz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Siehe Sicherheitsüberlegungen zur Reflexion.)

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

Siehe auch

Gilt für:

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen sowie der angegebenen Argumentliste und Kultur entspricht.

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);
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);
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 Konstruktors, der Methode, der Eigenschaft oder des Feldmembers enthält, der bzw. die aufgerufen werden soll.

- oder - Eine leere Zeichenfolge ("") zum Aufrufen des Standardmembers.

  • oder - Für IDispatch-Member eine Zeichenfolge, die 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 aus einem der BindingFlags wie Public, NonPublic, Private, InvokeMethod, GetField usw. bestehen. Die Art der Suche muss nicht angegeben werden. Wenn die Art der Suche nicht angegeben ist, werden BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static verwendet.

binder
Binder

Ein Objekt, das eine Gruppe von Eigenschaften definiert und eine Bindung ermöglicht. Dazu kann die Auswahl einer überladenen Methode, die Umwandlung von Argumenttypen und der Aufruf eines Members durch Reflektion gehören.

- oder - Ein Nullverweis (Nothing in Visual Basic), wenn DefaultBinder verwendet werden soll. Beachten Sie, dass möglicherweise ein Binder-Objekt explizit definiert werden muss, um erfolgreich Methodenüberladungen mit Variablenargumenten aufrufen zu können.

target
Object

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

args
Object[]

Ein Array mit den Argumenten, die dem aufzurufenden Member übergeben werden sollen.

culture
CultureInfo

Das Objekt, das das zu verwendende Globalisierungsgebietsschema darstellt, das für gebietsspezifische Konvertierungen wie die Konvertierung einer numerischen String in einen Double erforderlich sein kann.

- oder - Ein Nullverweis (Nothing in Visual Basic), wenn die CultureInfo des aktuellen Threads verwendet werden soll.

Gibt zurück

Object

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

Implementiert

Ausnahmen

invokeAttr enthält keine CreateInstance, und name ist null.

invokeAttr ist kein gültiges BindingFlags-Attribut.

- oder - invokeAttr enthält keines der folgenden Bindungsflags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty oder SetProperty.

- oder - invokeAttr enthält CreateInstance in Kombination mit InvokeMethod, GetField, SetField, GetProperty oder SetProperty.

- oder - invokeAttr enthält sowohl GetField als auch SetField.

- oder - invokeAttr enthält sowohl GetProperty als auch SetProperty.

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

  • oder - invokeAttr enthält SetField, und args enthält mehr als ein Element.

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

  • oder - Eines der benannten Parameterarrays enthält eine Zeichenfolge, die null ist.

Der angegebene Member ist ein Klasseninitialisierer.

Das Feld oder die Eigenschaft wurde nicht gefunden.

Es wurde keine Methode gefunden, die den Argumenten in args entspricht.

- oder - Das aktuelle Type-Objekt stellt einen Typ dar, der offene Typparameter enthält. Das bedeutet, dass ContainsGenericParameters den Wert true zurückgibt.

Der angegebene Member kann nicht für target aufgerufen werden.

Mehrere Methoden entsprechen den Bindungskriterien.

Die durch name dargestellte Methode enthält mindestens einen nicht angegebenen generischen Typparameter. Das bedeutet, dass die ContainsGenericParameters-Eigenschaft der Methode true zurückgibt.

Hinweise

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

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 BindingFlags.Public an, öffentliche Mitglieder in die Suche einzuschließen.

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

  • Geben Sie BindingFlags.FlattenHierarchy an, statische Elemente in die Hierarchie einzuschließen.

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

  • BindingFlags.IgnoreCase um den Fall von name.

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

Die folgenden BindingFlags Aufrufflaggen 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, aber nicht eines Konstruktors oder eines Typinitializers. Ungültig mit SetField oder SetProperty. Wenn InvokeMethod sie selbst angegeben wird, BindingFlags.Public``BindingFlags.Instancewerden sie BindingFlags.Static 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 so legen Sie eine Eigenschaft fest. Ungültig mit GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen wahr 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 durch den Ordner in den Typ des Parameters konvertiert werden.

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

Nachdem die Methode ausgewählt wurde, wird sie aufgerufen. Die Barrierefreiheit wird an diesem Punkt überprüft. Die Suche kann steuern, welche Methodensätze basierend auf dem Barrierefreiheitsattribute, das der Methode zugeordnet ist, durchsucht werden. Die Binder.BindToMethod Methode der Binder Klasse ist dafür verantwortlich, die aufgerufene Methode auszuwählen. Der Standardbinder wählt die spezifischste Übereinstimmung aus.

Zugriffsbeschränkungen werden für vollständig vertrauenswürdigen Code ignoriert; das heißt, private Konstruktoren, Methoden, Felder und Eigenschaften können über Reflection aufgerufen und aufgerufen werden, wenn der Code vollständig vertrauenswürdig ist.

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

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. Folgendes:

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

das Feld F für dieses neue Array initialisiert. Sie können auch Type.InvokeMember eine Position in einem Array festlegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie 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 Mitglieds durch DispID ist schneller als das Nachschlagen des Mitglieds nach Namen. In komplexen Aggregationsszenarien ist die DispID manchmal die einzige Möglichkeit, das gewünschte Element aufzurufen.

Hinweis

Ab dem .NET Framework 2.0 Service Pack 1 kann diese Methode verwendet werden, um auf nicht öffentliche Mitglieder zuzugreifen, wenn der Aufrufer mit dem ReflectionPermissionFlag.RestrictedMemberAccess Flag erteilt ReflectionPermission wurde und wenn der Grantsatz der nicht öffentlichen Mitglieder auf den Erteilungssatz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Siehe Sicherheitsüberlegungen zur Reflexion.)

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

Siehe auch

Gilt für:

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen und der angegebenen Argumentliste entspricht.

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);
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);
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 Konstruktors, der Methode, der Eigenschaft oder des Feldmembers enthält, der bzw. die aufgerufen werden soll.

- oder - Eine leere Zeichenfolge ("") zum Aufrufen des Standardmembers.

  • oder - Für IDispatch-Member eine Zeichenfolge, die 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 aus einem der BindingFlags wie Public, NonPublic, Private, InvokeMethod, GetField usw. bestehen. Die Art der Suche muss nicht angegeben werden. Wenn die Art der Suche nicht angegeben ist, werden BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static verwendet.

binder
Binder

Ein Objekt, das eine Gruppe von Eigenschaften definiert und eine Bindung ermöglicht. Dazu kann die Auswahl einer überladenen Methode, die Umwandlung von Argumenttypen und der Aufruf eines Members durch Reflektion gehören.

- oder - Ein Nullverweis (Nothing in Visual Basic), wenn DefaultBinder verwendet werden soll. Beachten Sie, dass möglicherweise ein Binder-Objekt explizit definiert werden muss, um erfolgreich Methodenüberladungen mit Variablenargumenten aufrufen zu können.

target
Object

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

args
Object[]

Ein Array mit den Argumenten, die dem aufzurufenden Member übergeben werden sollen.

Gibt zurück

Object

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

Implementiert

Ausnahmen

invokeAttr enthält keine CreateInstance, und name ist null.

invokeAttr ist kein gültiges BindingFlags-Attribut.

- oder - invokeAttr enthält keines der folgenden Bindungsflags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty oder SetProperty.

- oder - invokeAttr enthält CreateInstance in Kombination mit InvokeMethod, GetField, SetField, GetProperty oder SetProperty.

- oder - invokeAttr enthält sowohl GetField als auch SetField.

- oder - invokeAttr enthält sowohl GetProperty als auch SetProperty.

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

  • oder - invokeAttr enthält SetField, und args enthält mehr als ein Element.

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

  • oder - Eines der benannten Parameterarrays enthält eine Zeichenfolge, die null ist.

Der angegebene Member ist ein Klasseninitialisierer.

Das Feld oder die Eigenschaft wurde nicht gefunden.

Es wurde keine Methode gefunden, die den Argumenten in args entspricht.

- oder - Das aktuelle Type-Objekt stellt einen Typ dar, der offene Typparameter enthält. Das bedeutet, dass ContainsGenericParameters den Wert true zurückgibt.

Der angegebene Member kann nicht für target aufgerufen werden.

Mehrere Methoden entsprechen den Bindungskriterien.

Diese Methode wird von .NET Compact Framework derzeit nicht unterstützt.

Die durch name dargestellte Methode enthält mindestens einen nicht angegebenen generischen Typparameter. Das bedeutet, dass die ContainsGenericParameters-Eigenschaft der Methode true zurückgibt.

Beispiele

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

using namespace System;
using namespace System::Reflection;

// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
   Int32 myField;

public:
   MyType( interior_ptr<Int32> x )
   {
       *x *= 5;
   }

   virtual String^ ToString() override
   {
      return myField.ToString();
   }

   property Int32 MyProp 
   {
      Int32 get()
      {
         return myField;
      }

      void set( Int32 value )
      {
         if ( value < 1 )
                  throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );

         myField = value;
      }
   }
};

int main()
{
   Type^ t = MyType::typeid;

   // Create an instance of a type.
   array<Object^>^args = {8};
   Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
   Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
   Console::WriteLine( "Type: {0}", obj->GetType() );
   Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );

   // Read and write to a field.
   array<Object^>^obj5 = {5};
   t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
   Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
   Console::WriteLine( "myField: {0}", v );

   // Call a method.
   String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
   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. 
      array<Object^>^obj0 = {(int^)0};
      t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
   }
   catch ( TargetInvocationException^ e ) 
   {
      // If the property assignment failed for some unexpected
      // reason, rethrow the TargetInvocationException.
      if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
            throw;

      Console::WriteLine( "An invalid value was assigned to MyProp." );
   }

   array<Object^>^obj2 = {2};
   t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
   v =  safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
   Console::WriteLine( "MyProp: {0}", v );
}
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 InvokeMember keine generische Methode aufrufen.

Die folgenden BindingFlags Filter-Flags können verwendet werden, um zu definieren, welche Elemente in die Suche einbezogen werden sollen:

  • Geben Sie an BindingFlags.Public , öffentliche Mitglieder in die Suche einzuschließen.

  • Geben Sie an BindingFlags.NonPublic , nicht öffentliche Mitglieder (also private und geschützte Mitglieder) in die Suche einzuschließen.

  • Geben Sie an BindingFlags.FlattenHierarchy , statische Elemente in die Hierarchie einzuschließen.

Die folgenden BindingFlags Modifizierer-Flags können verwendet werden, um zu ändern, wie die Suche funktioniert:

  • BindingFlags.IgnoreCase so ignorieren Sie den Fall von name.

  • BindingFlags.DeclaredOnly um nur die mitglieder zu durchsuchen, die auf der Type, nicht mitglieder, die einfach geerbt wurden.

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

  • CreateInstance um einen Konstruktor aufzurufen. name wird ignoriert. Nicht gültig mit anderen Aufrufzeichen.

  • InvokeMethod zum Aufrufen einer Methode, aber nicht eines Konstruktors oder eines Typ-Initializers. Ungültig mit SetField oder SetProperty. Wenn InvokeMethod sie selbst angegeben wird, BindingFlags.Public``BindingFlags.Instance``BindingFlags.Static werden sie 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 so legen Sie eine Eigenschaft fest. Ungültig mit GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen wahr sind:

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

  • Der Typ jedes Arguments kann durch den Ordner in den Typ des Parameters konvertiert werden.

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

Nachdem die Methode ausgewählt wurde, wird sie aufgerufen. Die Barrierefreiheit wird an diesem Punkt überprüft. Die Suche kann steuern, welche Gruppe von Methoden basierend auf dem Barrierefreiheitsattribute, das der Methode zugeordnet ist, durchsucht werden. Die Binder.BindToMethod Methode der Binder Klasse ist dafür verantwortlich, die aufgerufene Methode auszuwählen. Der Standardbinder wählt die spezifischste Übereinstimmung aus.

Zugriffsbeschränkungen werden für voll vertrauenswürdigen Code ignoriert; das heißt, private Konstruktoren, Methoden, Felder und Eigenschaften können zugegriffen und aufgerufen System.Reflection werden, wenn der Code vollständig vertrauenswürdig ist.

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

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

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

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

das Feld F für dieses neue Array initialisiert. Sie können auch Type.InvokeMember eine Position in einem Array festlegen, 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 an die Zeichenfolge "b" hält.

Wenn Sie ein IDispatch Element aufrufen, können Sie die DispID anstelle des Membernamens angeben, indem Sie das Zeichenfolgenformat "[DispID=##]" verwenden. 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 Elements nach Dem Namen. In komplexen Aggregationsszenarien ist die DispID manchmal die einzige Möglichkeit, das gewünschte Element aufzurufen.

Hinweis

Ab dem .NET Framework 2.0 Service Pack 1 kann diese Methode verwendet werden, um auf nicht öffentliche Mitglieder zuzugreifen, wenn der Anrufer mit dem ReflectionPermissionFlag.RestrictedMemberAccess Flag gewährt wurde und wenn der Grantsatz der nicht öffentlichen Mitglieder auf den Grantsatz des Anrufers oder eine Teilmenge davon beschränkt istReflectionPermission. (Siehe Sicherheitsüberlegungen für Spiegelung.)

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

Siehe auch

Gilt für: