Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Type.InvokeMember-Methode: (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.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public abstract object InvokeMember(
	string name,
	BindingFlags invokeAttr,
	Binder binder,
	object target,
	object[] args,
	ParameterModifier[] modifiers,
	CultureInfo culture,
	string[] namedParameters
)

Parameter

name
Type: System.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
Type: System.Reflection.BindingFlags

Eine Bitmaske aus einem oder mehreren BindingFlags, 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
Type: System.Reflection.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
Type: System.Object

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

args
Type: System.Object[]

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

modifiers
Type: System.Reflection.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
Type: System.Globalization.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
Type: System.String[]

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

Rückgabewert

Type: System.Object

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

Exception Condition
ArgumentNullException

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

ArgumentException

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.

MethodAccessException

Der angegebene Member ist ein Klasseninitialisierer.

MissingFieldException

Das Feld oder die Eigenschaft wurde nicht gefunden.

MissingMethodException

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.

TargetException

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

AmbiguousMatchException

Mehrere Methoden entsprechen den Bindungskriterien.

InvalidOperationException

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

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.

System_CAPS_noteHinweis

You cannot use M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]) to invoke a generic method.

When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Invoking a member by DispID is faster than looking up the member by name. In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Although the default binder does not process T:System.Reflection.ParameterModifier or T:System.Globalization.CultureInfo (the modifiers and culture parameters), you can use the abstract T:System.Reflection.Binder class to write a custom binder that does process modifiers and culture. ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

Each parameter in the namedParameters array gets the value in the corresponding element in the args array. If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

The namedParameters array can be used to change the order of arguments in an input array. 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.

The following T:System.Reflection.BindingFlags filter flags can be used to define which members to include in the search:

  • Specify BindingFlags.Public to include public members in the search.

  • Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

The following T:System.Reflection.BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

The following T:System.Reflection.BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance to invoke a constructor. name is ignored. Not valid with other invocation flags.

  • InvokeMethod to invoke a method, but not a constructor or a type initializer. Not valid with SetField or SetProperty. If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField to get the value of a field. Not valid with SetField.

  • SetField to set the value of a field. Not valid with GetField.

  • GetProperty to get a property. Not valid with SetProperty.

  • SetProperty to set a property. Not valid with GetProperty.

See T:System.Reflection.BindingFlags for more information.

A method will be invoked if both of the following conditions are true:

  • 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).

  • The type of each argument can be converted by the binder to the type of the parameter.

The binder will find all of the matching methods. These methods are found based upon the type of binding requested (T:System.Reflection.BindingFlags values InvokeMethod, GetProperty, and so on). The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

After the method is selected, it is invoked. Accessibility is checked at that point. The search may control which set of methods are searched based upon the accessibility attribute associated with the method. The M:System.Reflection.Binder.BindToMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[]@,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object@) method of the T:System.Reflection.Binder class is responsible for selecting the method to be invoked. The default binder selects the most specific match.

InvokeMember can be used to invoke methods with parameters that have default values. To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

For example, consider a method such as MyMethod(int x, float y = 2.0). 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. Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. If you must do so, use InvokeMember instead.

Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through N:System.Reflection whenever the code is fully trusted.

You can use Type.InvokeMember to set a field to a particular value by specifying F:System.Reflection.BindingFlags.SetField. 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);

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

which will initialize the field F to this new array. 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);

This will change string "z" in the array that F holds to string "b".

System_CAPS_noteHinweis

Starting with the net_v20sp1_long, this method can be used to access non-public members if the caller has been granted T:System.Security.Permissions.ReflectionPermission with the F:System.Security.Permissions.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. (See Security Considerations for Reflection.)

To use this functionality, your application should target the net_v35_long or later.

ReflectionPermission

for accessing non-public members when the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. Associated enumeration: F:System.Security.Permissions.ReflectionPermissionFlag.RestrictedMemberAccess

ReflectionPermission

for accessing non-public members regardless of their grant set. Associated enumeration: F:System.Security.Permissions.ReflectionPermissionFlag.MemberAccess

SecurityPermission

to call unmanaged code. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode

.NET Framework
Verfügbar seit 1.1
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Zurück zum Anfang
Anzeigen: