Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

Definition

Ruft einen bestimmten Member vom aktuellen Type auf.Invokes a specific member of the current Type.

Überlädt

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) 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.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen und der angegebenen Argumentliste entspricht.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen sowie der angegebenen Argumentliste und Kultur entspricht.Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) 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.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

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);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj

Parameter

name
String String String

Die Zeichenfolge, die den Namen des Konstruktors, der Methode, der Eigenschaft oder des Feldmembers enthält, der bzw. die aufgerufen werden soll.The string containing the name of the constructor, method, property, or field member to invoke.

- oder --or- Eine leere Zeichenfolge ("") zum Aufrufen des Standardmembers.An empty string ("") to invoke the default member.

- oder --or- Für IDispatch-Member eine Zeichenfolge, die die DispID darstellt, z. B. "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird.A bitwise combination of the enumeration values that specify how the search is conducted. Der Zugriff kann aus einem der BindingFlags wie Public, NonPublic, Private, InvokeMethod, GetField usw. bestehen.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Die Art der Suche muss nicht angegeben werden.The type of lookup need not be specified. Wenn die Art der Suche nicht angegeben ist, werden BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static verwendet.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder 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.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- oder --or- Ein Nullverweis (Nothing in Visual Basic), wenn DefaultBinder verwendet werden soll.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Beachten Sie, dass möglicherweise ein Binder-Objekt explizit definiert werden muss, um erfolgreich Methodenüberladungen mit Variablenargumenten aufrufen zu können.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Das Objekt, für das der angegebene Member aufgerufen werden soll.The object on which to invoke the specified member.

args
Object[]

Ein Array mit den Argumenten, die dem aufzurufenden Member übergeben werden sollen.An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

Ein Array von ParameterModifier-Objekten, die die Attribute darstellen, die dem entsprechenden Element im args-Array zugeordnet sind.An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. Die einem Parameter zugeordneten Attribute werden in der Signatur des Members gespeichert.A parameter's associated attributes are stored in the member's signature.

Der Standardbinder verarbeitet diesen Parameter nur, wenn eine COM-Komponente aufgerufen wird.The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo 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.The CultureInfo object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

- oder --or- Ein Nullverweis (Nothing in Visual Basic), wenn die CultureInfo des aktuellen Threads verwendet werden soll.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

Ein Array mit den Namen der Parameter, an die die Elemente des args-Arrays übergeben werden.An array containing the names of the parameters to which the values in the args array are passed.

Gibt zurück

Ein Objekt, das den Rückgabewert des aufgerufenen Members darstellt.An object representing the return value of the invoked member.

Implementiert

Ausnahmen

invokeAttr enthält keine CreateInstance, und name ist null.invokeAttr does not contain CreateInstance and name is null.

args und modifiers weisen nicht die gleiche Länge auf.args and modifiers do not have the same length.

- oder --or- invokeAttr ist kein gültiges BindingFlags -Attribut.invokeAttr is not a valid BindingFlags attribute.

- oder --or- invokeAttr enthält keines der folgenden Bindungsflags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty oder SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

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

- oder --or- invokeAttr enthält sowohl GetField als auch SetField.invokeAttr contains both GetField and SetField.

- oder --or- invokeAttr enthält sowohl GetProperty als auch SetProperty.invokeAttr contains both GetProperty and SetProperty.

- oder --or- invokeAttr enthält InvokeMethod in Kombination mit SetField oder SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- oder --or- invokeAttr enthält SetField, und args enthält mehr als ein Element.invokeAttr contains SetField and args has more than one element.

- oder --or- Das benannte Parameterarray ist größer als das Argumentarray.The named parameter array is larger than the argument array.

- oder --or- 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.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

- oder --or- Eines der benannten Parameterarrays enthält eine Zeichenfolge, die null ist.One of the named parameter arrays contains a string that is null.

Der angegebene Member ist ein Klasseninitialisierer.The specified member is a class initializer.

Das Feld oder die Eigenschaft wurde nicht gefunden.The field or property cannot be found.

Es wurde keine Methode gefunden, die den Argumenten in args entspricht.No method can be found that matches the arguments in args.

- oder --or- Es wurde kein Member gefunden, dessen Argumentnamen in namedParameters angegeben sind.No member can be found that has the argument names supplied in namedParameters.

- oder --or- Das aktuelle Type-Objekt stellt einen Typ dar, der offene Typparameter enthält. Das bedeutet, dass ContainsGenericParameters den Wert true zurückgibt.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Der angegebene Member kann nicht für target aufgerufen werden.The specified member cannot be invoked on target.

Mehrere Methoden entsprechen den Bindungskriterien.More than one method matches the binding criteria.

Die durch name dargestellte Methode enthält mindestens einen nicht angegebenen generischen Typparameter.The method represented by name has one or more unspecified generic type parameters. Das bedeutet, dass die ContainsGenericParameters-Eigenschaft der Methode true zurückgibt.That is, the method's ContainsGenericParameters property returns true.

Hinweise

InvokeMemberRuft einen konstruktormember oder einen Methodenmember auf, Ruft einen Eigenschaftenmember ab oder legt ihn fest, Ruft einen datenfeldmember ab oder legt ihn fest oder Ruft ein Element eines Array Members ab oder legt es fest.InvokeMember calls a constructor member or a method member, gets or sets a property member, gets or sets a data field member, or gets or sets an element of an array member.

Hinweis

Sie können nicht InvokeMember verwenden, um eine generische Methode aufzurufen.You cannot use InvokeMember to invoke a generic method.

Wenn Sie einen IDispatch Member aufrufen, können Sie die DISPID anstelle des Element namens angeben, indem Sie das Zeichen folgen Format "[DispID = # #]" verwenden.When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Wenn z. b. die DispID von MyComMethod den Wert 3 hat, können Sie die Zeichenfolge "[DispID = 3]" anstelle von "MyComMethod" angeben.For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Das Aufrufen eines Members durch DISPID ist schneller, als das Element nach dem Namen zu suchen.Invoking a member by DispID is faster than looking up the member by name. In komplexen Aggregations Szenarios ist die DISPID manchmal die einzige Möglichkeit, den gewünschten Member aufzurufen.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Obwohl der Standard Binder ParameterModifier weder noch CultureInfo den modifiers -Parameter und den culture -Parameter verarbeitet, können Sie die abstrakte System.Reflection.Binder -Klasse verwenden, um einen benutzerdefinierten Binder modifiers zu schreiben, der verarbeitet und culture.Although the default binder does not process ParameterModifier or CultureInfo (the modifiers and culture parameters), you can use the abstract System.Reflection.Binder class to write a custom binder that does process modifiers and culture. ParameterModifierwird nur beim Aufrufen über COM-Interop verwendet, und nur Parameter, die als Verweis übermittelt werden, werden behandelt.ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

Jeder Parameter im namedParameters-Array ruft den Wert im entsprechenden Element im args-Array ab.Each parameter in the namedParameters array gets the value in the corresponding element in the args array. Wenn die Länge von args größer als die Länge von namedParameters ist, werden die restlichen Argumentwerte in der Reihenfolge übergeben.If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

Das namedParameters Array kann verwendet werden, um die Reihenfolge der Argumente in einem Eingabe Array zu ändern.The namedParameters array can be used to change the order of arguments in an input array. Wenn beispielsweise die-Methode M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) und das Eingabe Array { 42, "x" }angegeben werden, kann das Eingabe Array unverändert an args übergeben werden, { "b", "a" } wenn das Array namedParametersfür bereitgestellt wird.For example, given the method M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) and the input array { 42, "x" }, the input array can be passed unchanged to args if the array { "b", "a" } is supplied for namedParameters.

Die folgenden BindingFlags Filterflags können verwendet werden, um zu definieren, welche Elemente in die Suche eingeschlossen werden sollen:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Geben BindingFlags.Public Sie an, dass öffentliche Member in die Suche einbezogen werden sollen.Specify BindingFlags.Public to include public members in the search.

  • Geben BindingFlags.NonPublic Sie an, dass nicht öffentliche Member in die Suche eingeschlossen werden sollen (d. h. private, interne und geschützte Member).Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Gibt BindingFlags.FlattenHierarchy an, dass statische Elemente in der Hierarchie nach oben eingeschlossen werdenSpecify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Die folgenden BindingFlags Modifiziererflags können verwendet werden, um die Funktionsweise der Suche zu ändern:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase, wenn der Fall von nameignoriert werden soll.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly, um nur die Member zu durchsuchen Type, die auf dem deklariert sind, nicht Elemente, die einfach geerbt wurden.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Die folgenden BindingFlags Aufruf-Flags können verwendet werden, um anzugeben, welche Aktion mit dem Element ausgeführt werden soll:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance, um einen Konstruktor aufzurufen.CreateInstance to invoke a constructor. namewird ignoriert.name is ignored. Ungültig mit anderen Aufruf-Flags.Not valid with other invocation flags.

  • InvokeMethod, um eine Methode aufzurufen, aber keinen Konstruktor oder Typinitialisierer.InvokeMethod to invoke a method, but not a constructor or a type initializer. Ungültig mit SetField oder SetProperty.Not valid with SetField or SetProperty. Wenn InvokeMethod eigenständig angegeben wird BindingFlags.Instance, BindingFlags.Publicwerden, und BindingFlags.Static automatisch eingeschlossen.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField, wenn der Wert eines Felds angezeigt werden soll.GetField to get the value of a field. Ungültig mit SetField.Not valid with SetField.

  • SetField, um den Wert eines Felds festzulegen.SetField to set the value of a field. Ungültig mit GetField.Not valid with GetField.

  • GetProperty, um eine Eigenschaft zu erhalten.GetProperty to get a property. Ungültig mit SetProperty.Not valid with SetProperty.

  • SetProperty, um eine Eigenschaft festzulegen.SetProperty to set a property. Ungültig mit GetProperty.Not valid with GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen zutreffen:A method will be invoked if both of the following conditions are true:

  • Die Anzahl der Parameter in der Methoden Deklaration entspricht der Anzahl der Argumente im args Array (es sei denn, es sind Standardargumente für BindingFlags.OptionalParamBinding den Member definiert und werden angegeben).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Der Typ jedes Arguments kann vom Binder in den Typ des Parameters konvertiert werden.The type of each argument can be converted by the binder to the type of the parameter.

Der Binder findet alle übereinstimmenden Methoden.The binder will find all of the matching methods. Diese Methoden werden basierend auf dem Typ der angeforderten Bindung gefunden (BindingFlags Werte InvokeMethod, GetPropertyusw.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Der Satz von Methoden wird anhand des Namens, der Anzahl von Argumenten und einer Reihe von suchmodifizierermembern gefiltert, die im Binder definiert sind.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Nachdem die Methode ausgewählt wurde, wird Sie aufgerufen.After the method is selected, it is invoked. An diesem Punkt wird Barrierefreiheit geprüft.Accessibility is checked at that point. Die Suche kann steuern, welcher Satz von Methoden basierend auf dem Barrierefreiheits Attribut, das der Methode zugeordnet ist, durchsucht wird.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Die Binder.BindToMethod -Methode Binder der-Klasse ist verantwortlich für die Auswahl der aufzurufenden Methode.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Der Standard Binder wählt die spezifischsten Übereinstimmung aus.The default binder selects the most specific match.

InvokeMemberkann verwendet werden, um Methoden mit Parametern aufzurufen, die über Standardwerte verfügen.InvokeMember can be used to invoke methods with parameters that have default values. Um an diese Methoden gebunden zu werden, BindingFlags.OptionalParamBinding muss die Reflektion angegeben werden.To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. Bei einem Parameter mit einem Standardwert können Sie entweder einen anderen Wert angeben oder angeben Missing.Value , um den Standardwert zu verwenden.For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

Angenommen, eine Methode, z. b. "MyMethod" (int x, float y = 2,0).For example, consider a method such as MyMethod(int x, float y = 2.0). Um diese Methode nur mit dem ersten Argument als MyMethod (4) aufzurufen, übergeben Sie eines der obigen Bindungsflags, und übergeben Sie zwei Argumente, nämlich 4 für das Missing.Value erste Argument und für das zweite Argument.To invoke this method with only the first argument as MyMethod(4), pass one of the above binding flags and pass two arguments, namely, 4 for the first argument and Missing.Value for the second argument. Wenn Sie nicht Missing.Valueverwenden, dürfen Sie keine optionalen Parameter mit der Invoke -Methode weglassen.Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. Wenn Sie dies tun müssen, verwenden InvokeMember Sie stattdessen.If you must do so, use InvokeMember instead.

Zugriffs Einschränkungen werden bei voll vertrauenswürdigem Code ignoriert. Das heißt, Private Konstruktoren, Methoden, Felder und Eigenschaften können aufgerufen und aufgerufen System.Reflection werden, wenn der Code vollständig vertrauenswürdig ist.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Sie können verwenden Type.InvokeMember , um ein Feld auf einen bestimmten Wert festzulegen BindingFlags.SetField, indem Sie angeben.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Wenn Sie z. b. ein öffentliches Instanzfeld mit dem Namen f für die Klasse C und f als Stringfestlegen möchten, können Sie Code wie den folgenden verwenden:For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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 wie den folgenden verwenden:If F is a String[], you can use code such as:

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

Dadurch wird das Feld F mit diesem neuen Array initialisiert.which will initialize the field F to this new array. Sie können auch verwenden Type.InvokeMember , um eine Position in einem Array festzulegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie dem folgenden angeben:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Dadurch wird die Zeichenfolge "z" in dem Array geändert, das F in die Zeichenfolge "b" enthält.This will change string "z" in the array that F holds to string "b".

Hinweis

Ab kann diese Methode verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer mit dem ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess -Flag erteilt wurde, und wenn der Berechtigungs Satz der nicht öffentlichen Member auf den Berechtigungs Satz des Aufrufers oder eine Teilmenge beschränkt ist. .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1 Auslegung.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Siehe Sicherheitsüberlegungen für die Reflektion.)(See Security Considerations for Reflection.)

Zur Verwendung dieser Funktionen sollte die Anwendung für .NET Framework 3,5.NET Framework 3.5 oder höher ausgelegt sein.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Sicherheit

ReflectionPermission
für den Zugriff auf nicht öffentliche Member, unabhängig von deren Berechtigungs Satz.for accessing non-public members regardless of their grant set. Zugehörige Enumeration:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
, wenn nicht verwalteter Code aufgerufen werden soll.to call unmanaged code. Zugehörige Enumeration:UnmanagedCodeAssociated enumeration: UnmanagedCode

Siehe auch

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen und der angegebenen Argumentliste entspricht.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

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);
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

Parameter

name
String String String

Die Zeichenfolge, die den Namen des Konstruktors, der Methode, der Eigenschaft oder des Feldmembers enthält, der bzw. die aufgerufen werden soll.The string containing the name of the constructor, method, property, or field member to invoke.

- oder --or- Eine leere Zeichenfolge ("") zum Aufrufen des Standardmembers.An empty string ("") to invoke the default member.

- oder --or- Für IDispatch-Member eine Zeichenfolge, die die DispID darstellt, z. B. "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird.A bitwise combination of the enumeration values that specify how the search is conducted. Der Zugriff kann aus einem der BindingFlags wie Public, NonPublic, Private, InvokeMethod, GetField usw. bestehen.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Die Art der Suche muss nicht angegeben werden.The type of lookup need not be specified. Wenn die Art der Suche nicht angegeben ist, werden BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static verwendet.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder 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.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- oder --or- Ein Nullverweis (Nothing in Visual Basic), wenn DefaultBinder verwendet werden soll.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Beachten Sie, dass möglicherweise ein Binder-Objekt explizit definiert werden muss, um erfolgreich Methodenüberladungen mit Variablenargumenten aufrufen zu können.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Das Objekt, für das der angegebene Member aufgerufen werden soll.The object on which to invoke the specified member.

args
Object[]

Ein Array mit den Argumenten, die dem aufzurufenden Member übergeben werden sollen.An array containing the arguments to pass to the member to invoke.

Gibt zurück

Ein Objekt, das den Rückgabewert des aufgerufenen Members darstellt.An object representing the return value of the invoked member.

Implementiert

Ausnahmen

invokeAttr enthält keine CreateInstance, und name ist null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr ist kein gültiges BindingFlags-Attribut.invokeAttr is not a valid BindingFlags attribute.

- oder --or- invokeAttr enthält keines der folgenden Bindungsflags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty oder SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

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

- oder --or- invokeAttr enthält sowohl GetField als auch SetField.invokeAttr contains both GetField and SetField.

- oder --or- invokeAttr enthält sowohl GetProperty als auch SetProperty.invokeAttr contains both GetProperty and SetProperty.

- oder --or- invokeAttr enthält InvokeMethod in Kombination mit SetField oder SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- oder --or- invokeAttr enthält SetField, und args enthält mehr als ein Element.invokeAttr contains SetField and args has more than one element.

- oder --or- 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.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

- oder --or- Eines der benannten Parameterarrays enthält eine Zeichenfolge, die null ist.One of the named parameter arrays contains a string that is null.

Der angegebene Member ist ein Klasseninitialisierer.The specified member is a class initializer.

Das Feld oder die Eigenschaft wurde nicht gefunden.The field or property cannot be found.

Es wurde keine Methode gefunden, die den Argumenten in args entspricht.No method can be found that matches the arguments in args.

- oder --or- Das aktuelle Type-Objekt stellt einen Typ dar, der offene Typparameter enthält. Das bedeutet, dass ContainsGenericParameters den Wert true zurückgibt.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Der angegebene Member kann nicht für target aufgerufen werden.The specified member cannot be invoked on target.

Mehrere Methoden entsprechen den Bindungskriterien.More than one method matches the binding criteria.

Diese Methode wird von .NET Compact Framework derzeit nicht unterstützt.The .NET Compact Framework does not currently support this method.

Die durch name dargestellte Methode enthält mindestens einen nicht angegebenen generischen Typparameter.The method represented by name has one or more unspecified generic type parameters. Das bedeutet, dass die ContainsGenericParameters-Eigenschaft der Methode true zurückgibt.That is, the method's ContainsGenericParameters property returns true.

Beispiele

Im folgenden Beispiel wird InvokeMember verwendet, um auf Member eines Typs zuzugreifen.The following example uses InvokeMember to access members of a type.

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);
    }
}
Imports System
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 'New

    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 'MyType

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 'Main
End Class 'MyApp

Hinweise

Hinweis

Sie können nicht InvokeMember verwenden, um eine generische Methode aufzurufen.You cannot use InvokeMember to invoke a generic method.

Die folgenden BindingFlags Filterflags können verwendet werden, um zu definieren, welche Elemente in die Suche eingeschlossen werden sollen:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Geben BindingFlags.Public Sie an, dass öffentliche Member in die Suche einbezogen werden sollen.Specify BindingFlags.Public to include public members in the search.

  • Geben BindingFlags.NonPublic Sie an, dass nicht öffentliche Member in die Suche eingeschlossen werden sollen (d. h. private und geschützte Member).Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • Gibt BindingFlags.FlattenHierarchy an, dass statische Elemente in der Hierarchie nach oben eingeschlossen werdenSpecify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Die folgenden BindingFlags Modifiziererflags können verwendet werden, um die Funktionsweise der Suche zu ändern:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase, wenn der Fall von nameignoriert werden soll.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly, um nur die Member zu durchsuchen Type, die auf dem deklariert sind, nicht Elemente, die einfach geerbt wurden.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Die folgenden BindingFlags Aufruf-Flags können verwendet werden, um anzugeben, welche Aktion mit dem Element ausgeführt werden soll:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance, um einen Konstruktor aufzurufen.CreateInstance to invoke a constructor. namewird ignoriert.name is ignored. Ungültig mit anderen Aufruf-Flags.Not valid with other invocation flags.

  • InvokeMethod, um eine Methode aufzurufen, aber keinen Konstruktor oder Typinitialisierer.InvokeMethod to invoke a method, but not a constructor or a type initializer. Ungültig mit SetField oder SetProperty.Not valid with SetField or SetProperty. Wenn InvokeMethod eigenständig angegeben wird BindingFlags.Instance, BindingFlags.Publicwerden, und BindingFlags.Static automatisch eingeschlossen.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField, wenn der Wert eines Felds angezeigt werden soll.GetField to get the value of a field. Ungültig mit SetField.Not valid with SetField.

  • SetField, um den Wert eines Felds festzulegen.SetField to set the value of a field. Ungültig mit GetField.Not valid with GetField.

  • GetProperty, um eine Eigenschaft zu erhalten.GetProperty to get a property. Ungültig mit SetProperty.Not valid with SetProperty.

  • SetProperty, um eine Eigenschaft festzulegen.SetProperty to set a property. Ungültig mit GetProperty.Not valid with GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen zutreffen:A method will be invoked if both of the following conditions are true:

  • Die Anzahl der Parameter in der Methoden Deklaration entspricht der Anzahl der Argumente im args Array (es sei denn, es sind Standardargumente für BindingFlags.OptionalParamBinding den Member definiert und werden angegeben).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Der Typ jedes Arguments kann vom Binder in den Typ des Parameters konvertiert werden.The type of each argument can be converted by the binder to the type of the parameter.

Der Binder findet alle übereinstimmenden Methoden.The binder will find all of the matching methods. Diese Methoden werden basierend auf dem Typ der angeforderten Bindung gefunden (BindingFlags Werte InvokeMethod, GetPropertyusw.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Der Satz von Methoden wird anhand des Namens, der Anzahl von Argumenten und einer Reihe von suchmodifizierermembern gefiltert, die im Binder definiert sind.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Nachdem die Methode ausgewählt wurde, wird Sie aufgerufen.After the method is selected, it is invoked. An diesem Punkt wird Barrierefreiheit geprüft.Accessibility is checked at that point. Die Suche kann steuern, welcher Satz von Methoden basierend auf dem Barrierefreiheits Attribut, das der Methode zugeordnet ist, durchsucht wird.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Die Binder.BindToMethod -Methode Binder der-Klasse ist verantwortlich für die Auswahl der aufzurufenden Methode.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Der Standard Binder wählt die spezifischsten Übereinstimmung aus.The default binder selects the most specific match.

Zugriffs Einschränkungen werden bei voll vertrauenswürdigem Code ignoriert. Das heißt, Private Konstruktoren, Methoden, Felder und Eigenschaften können aufgerufen und aufgerufen System.Reflection werden, wenn der Code vollständig vertrauenswürdig ist.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Sie können verwenden Type.InvokeMember , um ein Feld auf einen bestimmten Wert festzulegen BindingFlags.SetField, indem Sie angeben.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Wenn Sie z. b. ein öffentliches Instanzfeld mit dem Namen f für die Klasse C und f als Stringfestlegen möchten, können Sie Code wie den folgenden verwenden:For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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

Wenn F ein String[]ist, können Sie Code wie den folgenden verwenden:If F is a String[], you can use code such as:

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

Dadurch wird das Feld F mit diesem neuen Array initialisiert.which will initialize the field F to this new array. Sie können auch verwenden Type.InvokeMember , um eine Position in einem Array festzulegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie dem folgenden angeben:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Dadurch wird die Zeichenfolge "z" in dem Array geändert, das F in die Zeichenfolge "b" enthält.This will change string "z" in the array that F holds to string "b".

Wenn Sie einen IDispatch Member aufrufen, können Sie die DISPID anstelle des Element namens angeben, indem Sie das Zeichen folgen Format "[DispID = # #]" verwenden.When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". Wenn z. b. die DispID von MyComMethod den Wert 3 hat, können Sie die Zeichenfolge "[DispID = 3]" anstelle von "MyComMethod" angeben.For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Das Aufrufen eines Members durch DISPID ist schneller, als das Element nach dem Namen zu suchen.Invoking a member by DispID is faster than looking up the member by name. In komplexen Aggregations Szenarios ist die DISPID manchmal die einzige Möglichkeit, den gewünschten Member aufzurufen.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Hinweis

Ab kann diese Methode verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer mit dem ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess -Flag erteilt wurde, und wenn der Berechtigungs Satz der nicht öffentlichen Member auf den Berechtigungs Satz des Aufrufers oder eine Teilmenge beschränkt ist. .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1 Auslegung.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Siehe Sicherheitsüberlegungen für die Reflektion.)(See Security Considerations for Reflection.)

Zur Verwendung dieser Funktionen sollte die Anwendung für .NET Framework 3,5.NET Framework 3.5 oder höher ausgelegt sein.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Sicherheit

ReflectionPermission
für den Zugriff auf nicht öffentliche Member, unabhängig von deren Berechtigungs Satz.for accessing non-public members regardless of their grant set. Zugehörige Enumeration:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
, wenn nicht verwalteter Code aufgerufen werden soll.to call unmanaged code. Zugehörige Enumeration:UnmanagedCodeAssociated enumeration: UnmanagedCode

Siehe auch

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

Ruft den angegebenen Member auf, der den angegebenen Bindungseinschränkungen sowie der angegebenen Argumentliste und Kultur entspricht.Invokes the specified member, using the specified binding constraints and matching the specified argument list and 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);
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

Parameter

name
String String String

Die Zeichenfolge, die den Namen des Konstruktors, der Methode, der Eigenschaft oder des Feldmembers enthält, der bzw. die aufgerufen werden soll.The string containing the name of the constructor, method, property, or field member to invoke.

- oder --or- Eine leere Zeichenfolge ("") zum Aufrufen des Standardmembers.An empty string ("") to invoke the default member.

- oder --or- Für IDispatch-Member eine Zeichenfolge, die die DispID darstellt, z. B. "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird.A bitwise combination of the enumeration values that specify how the search is conducted. Der Zugriff kann aus einem der BindingFlags wie Public, NonPublic, Private, InvokeMethod, GetField usw. bestehen.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Die Art der Suche muss nicht angegeben werden.The type of lookup need not be specified. Wenn die Art der Suche nicht angegeben ist, werden BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static verwendet.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder 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.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- oder --or- Ein Nullverweis (Nothing in Visual Basic), wenn DefaultBinder verwendet werden soll.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Beachten Sie, dass möglicherweise ein Binder-Objekt explizit definiert werden muss, um erfolgreich Methodenüberladungen mit Variablenargumenten aufrufen zu können.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Das Objekt, für das der angegebene Member aufgerufen werden soll.The object on which to invoke the specified member.

args
Object[]

Ein Array mit den Argumenten, die dem aufzurufenden Member übergeben werden sollen.An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo 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.The object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

- oder --or- Ein Nullverweis (Nothing in Visual Basic), wenn die CultureInfo des aktuellen Threads verwendet werden soll.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

Gibt zurück

Ein Objekt, das den Rückgabewert des aufgerufenen Members darstellt.An object representing the return value of the invoked member.

Implementiert

Ausnahmen

invokeAttr enthält keine CreateInstance, und name ist null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr ist kein gültiges BindingFlags-Attribut.invokeAttr is not a valid BindingFlags attribute.

- oder --or- invokeAttr enthält keines der folgenden Bindungsflags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty oder SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

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

- oder --or- invokeAttr enthält sowohl GetField als auch SetField.invokeAttr contains both GetField and SetField.

- oder --or- invokeAttr enthält sowohl GetProperty als auch SetProperty.invokeAttr contains both GetProperty and SetProperty.

- oder --or- invokeAttr enthält InvokeMethod in Kombination mit SetField oder SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- oder --or- invokeAttr enthält SetField, und args enthält mehr als ein Element.invokeAttr contains SetField and args has more than one element.

- oder --or- 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.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

- oder --or- Eines der benannten Parameterarrays enthält eine Zeichenfolge, die null ist.One of the named parameter arrays contains a string that is null.

Der angegebene Member ist ein Klasseninitialisierer.The specified member is a class initializer.

Das Feld oder die Eigenschaft wurde nicht gefunden.The field or property cannot be found.

Es wurde keine Methode gefunden, die den Argumenten in args entspricht.No method can be found that matches the arguments in args.

- oder --or- Das aktuelle Type-Objekt stellt einen Typ dar, der offene Typparameter enthält. Das bedeutet, dass ContainsGenericParameters den Wert true zurückgibt.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Der angegebene Member kann nicht für target aufgerufen werden.The specified member cannot be invoked on target.

Mehrere Methoden entsprechen den Bindungskriterien.More than one method matches the binding criteria.

Die durch name dargestellte Methode enthält mindestens einen nicht angegebenen generischen Typparameter.The method represented by name has one or more unspecified generic type parameters. Das bedeutet, dass die ContainsGenericParameters-Eigenschaft der Methode true zurückgibt.That is, the method's ContainsGenericParameters property returns true.

Hinweise

Obwohl der Standard CultureInfo Binder nicht verarbeitet (der culture -Parameter), können Sie die abstrakte System.Reflection.Binder -Klasse verwenden, um einen benutzerdefinierten Binder zu cultureschreiben, der verarbeitet.Although the default binder does not process CultureInfo (the culture parameter), you can use the abstract System.Reflection.Binder class to write a custom binder that does process culture.

Hinweis

Sie können nicht InvokeMember verwenden, um eine generische Methode aufzurufen.You cannot use InvokeMember to invoke a generic method.

Die folgenden BindingFlags Filterflags können verwendet werden, um zu definieren, welche Elemente in die Suche eingeschlossen werden sollen:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Geben BindingFlags.Public Sie an, dass öffentliche Member in die Suche einbezogen werden sollen.Specify BindingFlags.Public to include public members in the search.

  • Geben BindingFlags.NonPublic Sie an, dass nicht öffentliche Member in die Suche eingeschlossen werden sollen (d. h. private, interne und geschützte Member).Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Gibt BindingFlags.FlattenHierarchy an, dass statische Elemente in der Hierarchie nach oben eingeschlossen werdenSpecify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Die folgenden BindingFlags Modifiziererflags können verwendet werden, um die Funktionsweise der Suche zu ändern:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase, wenn der Fall von nameignoriert werden soll.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly, um nur die Member zu durchsuchen Type, die auf dem deklariert sind, nicht Elemente, die einfach geerbt wurden.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Die folgenden BindingFlags Aufruf-Flags können verwendet werden, um anzugeben, welche Aktion mit dem Element ausgeführt werden soll:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance, um einen Konstruktor aufzurufen.CreateInstance to invoke a constructor. namewird ignoriert.name is ignored. Ungültig mit anderen Aufruf-Flags.Not valid with other invocation flags.

  • InvokeMethod, um eine Methode aufzurufen, aber keinen Konstruktor oder Typinitialisierer.InvokeMethod to invoke a method, but not a constructor or a type initializer. Ungültig mit SetField oder SetProperty.Not valid with SetField or SetProperty. Wenn InvokeMethod eigenständig angegeben wird BindingFlags.Instance, BindingFlags.Publicwerden, und BindingFlags.Static automatisch eingeschlossen.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField, wenn der Wert eines Felds angezeigt werden soll.GetField to get the value of a field. Ungültig mit SetField.Not valid with SetField.

  • SetField, um den Wert eines Felds festzulegen.SetField to set the value of a field. Ungültig mit GetField.Not valid with GetField.

  • GetProperty, um eine Eigenschaft zu erhalten.GetProperty to get a property. Ungültig mit SetProperty.Not valid with SetProperty.

  • SetProperty, um eine Eigenschaft festzulegen.SetProperty to set a property. Ungültig mit GetProperty.Not valid with GetProperty.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Eine Methode wird aufgerufen, wenn beide der folgenden Bedingungen zutreffen:A method will be invoked if both of the following conditions are true:

  • Die Anzahl der Parameter in der Methoden Deklaration entspricht der Anzahl der Argumente im args Array (es sei denn, es sind Standardargumente für BindingFlags.OptionalParamBinding den Member definiert und werden angegeben).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Der Typ jedes Arguments kann vom Binder in den Typ des Parameters konvertiert werden.The type of each argument can be converted by the binder to the type of the parameter.

Der Binder findet alle übereinstimmenden Methoden.The binder will find all of the matching methods. Diese Methoden werden basierend auf dem Typ der angeforderten Bindung gefunden (BindingFlags Werte InvokeMethod, GetPropertyusw.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Der Satz von Methoden wird anhand des Namens, der Anzahl von Argumenten und einer Reihe von suchmodifizierermembern gefiltert, die im Binder definiert sind.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Nachdem die Methode ausgewählt wurde, wird Sie aufgerufen.After the method is selected, it is invoked. An diesem Punkt wird Barrierefreiheit geprüft.Accessibility is checked at that point. Die Suche kann steuern, welcher Satz von Methoden basierend auf dem Barrierefreiheits Attribut, das der Methode zugeordnet ist, durchsucht wird.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Die Binder.BindToMethod -Methode Binder der-Klasse ist verantwortlich für die Auswahl der aufzurufenden Methode.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Der Standard Binder wählt die spezifischsten Übereinstimmung aus.The default binder selects the most specific match.

Zugriffs Einschränkungen werden bei voll vertrauenswürdigem Code ignoriert. Das heißt, dass auf Private Konstruktoren, Methoden, Felder und Eigenschaften zugegriffen werden kann und die über Reflektion aufgerufen werden, wenn der Code vollständig vertrauenswürdig ist.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through Reflection whenever the code is fully trusted.

Sie können verwenden Type.InvokeMember , um ein Feld auf einen bestimmten Wert festzulegen BindingFlags.SetField, indem Sie angeben.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Wenn Sie z. b. ein öffentliches Instanzfeld mit dem Namen f in Class C und f als String festlegen möchten, können Sie Code wie den folgenden verwenden:For example, if you want to set a public instance field named F on class C, and F is a String you can use code such as:

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

Wenn F ein String[]ist, können Sie Code wie den folgenden verwenden:If F is a String[], you can use code such as:

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

Dadurch wird das Feld F mit diesem neuen Array initialisiert.which will initialize the field F to this new array. Sie können auch verwenden Type.InvokeMember , um eine Position in einem Array festzulegen, indem Sie den Index des Werts und dann den nächsten Wert mithilfe von Code wie dem folgenden angeben:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Dadurch wird die Zeichenfolge "z" in dem Array geändert, das F in die Zeichenfolge "b" enthält.This will change string "z" in the array that F holds to string "b".

Wenn Sie einen IDispatch Member aufrufen, können Sie die DISPID anstelle des Element namens angeben, indem Sie das Zeichen folgen Format "[DispID = # #]" verwenden.When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Wenn z. b. die DispID von MyComMethod den Wert 3 hat, können Sie die Zeichenfolge "[DispID = 3]" anstelle von "MyComMethod" angeben.For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Das Aufrufen eines Members durch DISPID ist schneller, als das Element nach dem Namen zu suchen.Invoking a member by DispID is faster than looking up the member by name. In komplexen Aggregations Szenarios ist die DISPID manchmal die einzige Möglichkeit, den gewünschten Member aufzurufen.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Hinweis

Ab kann diese Methode verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer mit dem ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess -Flag erteilt wurde, und wenn der Berechtigungs Satz der nicht öffentlichen Member auf den Berechtigungs Satz des Aufrufers oder eine Teilmenge beschränkt ist. .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1 Auslegung.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Siehe Sicherheitsüberlegungen für die Reflektion.)(See Security Considerations for Reflection.)

Zur Verwendung dieser Funktionen sollte die Anwendung für .NET Framework 3,5.NET Framework 3.5 oder höher ausgelegt sein.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Sicherheit

ReflectionPermission
für den Zugriff auf nicht öffentliche Member, unabhängig von deren Berechtigungs Satz.for accessing non-public members regardless of their grant set. Zugehörige Enumeration:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
, wenn nicht verwalteter Code aufgerufen werden soll.to call unmanaged code. Zugehörige Enumeration:UnmanagedCodeAssociated enumeration: UnmanagedCode

Siehe auch

Gilt für: