Exportieren (0) Drucken
Alle erweitern

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
)
public abstract Object InvokeMember (
	String name, 
	BindingFlags invokeAttr, 
	Binder binder, 
	Object target, 
	Object[] args, 
	ParameterModifier[] modifiers, 
	CultureInfo culture, 
	String[] namedParameters
)
public abstract function InvokeMember (
	name : String, 
	invokeAttr : BindingFlags, 
	binder : Binder, 
	target : Object, 
	args : Object[], 
	modifiers : ParameterModifier[], 
	culture : CultureInfo, 
	namedParameters : String[]
) : Object
Nicht zutreffend.

Parameter

name

Der String, der den Namen des aufzurufenden Konstruktors, der Methode, der Eigenschaft oder des Feldmembers enthält.

– oder –

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

– oder –

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

invokeAttr

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 ausgelassen wird, gilt BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.

binder

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

- oder -

NULL-Verweis (Nothing in Visual Basic), wenn der DefaultBinder verwendet werden soll. Beachten Sie, dass ggf. explizit ein Binder-Objekt definiert werden muss, um erfolgreich Methodenüberladungen mit Variablenargumenten aufzurufen.

target

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

args

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

modifiers

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

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 –

NULL-Verweis (Nothing in Visual Basic), wenn die CultureInfo des aktuellen Threads verwendet werden soll.

namedParameters

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

Rückgabewert

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

AusnahmetypBedingung

ArgumentNullException

invokeAttr enthält CreateInstance, und typeName ist NULL-Verweis (Nothing in Visual Basic).

ArgumentException

args ist mehrdimensional.

– oder –

modifiers ist mehrdimensional.

– oder –

args und modifiers haben nicht dieselbe Länge.

– oder –

invokeAttr ist kein gültiges BindingFlags-Attribut.

– oder –

invokeAttr enthält CreateInstance in Verbindung 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 Verbindung mit SetField oder SetProperty.

– oder –

invokeAttr enthält SetField, und args hat mehr als ein Element.

– oder –

Das angegebene 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 angegebenen Parameterarrays enthält eine Zeichenfolge, die NULL-Verweis (Nothing in Visual Basic) ist.

MethodAccessException

Der angegebene Member ist ein Klasseninitialisierer.

MissingFieldException

Das Feld oder die Eigenschaft kann nicht gefunden werden.

MissingMethodException

Die Methode kann nicht gefunden werden.

– oder –

Das aktuelle Type-Objekt stellt einen Typ dar, der offene Typparameter enthält, das heißt, ContainsGenericParameters gibt true zurück.

TargetException

Der angegebene Member kann nicht mit target aufgerufen werden.

AmbiguousMatchException

Es gibt mehr als eine Methode, die die Bindungskriterien erfüllt.

InvalidOperationException

Die durch name dargestellte Methode verfügt über einen oder mehrere nicht angegebene generische Typparameter. Das heißt, ihre ContainsGenericParameters-Eigenschaft gibt true zurück.

InvokeMember ruft ein Konstruktor- oder Methodenmember auf, ruft ein Eigenschaftenmember ab oder legt dieses fest bzw. ruft ein Element eines Arraymembers ab oder legt dieses fest.

HinweisHinweis:

Sie können InvokeMember nicht verwenden, um eine generische Methode aufzurufen.

Wenn Sie einen IDispatch-Member aufrufen, können Sie statt dem Membernamen die DispID angeben. Verwenden Sie dabei das Zeichenfolgenformat "[DispID=##]". Wenn die DispID von MyComMethod z. B. 3 ist, können Sie statt "MyComMethod" die Zeichenfolge "[DispID=3]" angeben. Der Aufruf eines Members über die DispID ist schneller als die Suche des Members über den Namen. In Szenarios mit komplexer Aggregierung stellt die DispID in einigen Fällen die einzige Möglichkeit dar, den gewünschten Member aufzurufen.

Obwohl der Standardbinder ParameterModifier oder CultureInfo (den modifiers-Parameter und den culture-Parameter) nicht verarbeitet, können Sie die abstrakte System.Reflection.Binder-Klasse zum Schreiben eines benutzerdefinierten Binders verwenden, der modifiers und culture verarbeitet. ParameterModifier wird nur in Verbindung mit COM-Interop-Aufrufen verwendet, und es werden nur Parameter verarbeitet, die als Verweis übergeben werden.

Das args-Array und das modifiers-Array haben dieselbe Länge. Ein im args-Array angegebener Parameter kann die folgenden im modifiers-Array definierten Attribute besitzen: pdIn, pdOut, pdLcid, pdRetval, pdOptional und pdHasDefault, die [In], [Out], [lcid], [retval], [optional] und einen Wert darstellen, der angibt, ob der Parameter über einen Standardwert verfügt. Die einem Parameter zugeordneten Attribute werden in den Metadaten gespeichert. Sie verbessern die Interoperabilität.

Jeder Parameter im namedParameters-Array ruft den Wert aus dem 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 bestehenden Reihenfolge übergeben.

Über die folgenden BindingFlags-Filterflags kann festgelegt werden, welche Member in die Suche einbezogen werden:

  • Es wird nur dann ein Ergebnis zurückgegeben, wenn entweder BindingFlags.Instance oder BindingFlags.Static angegeben wird.

  • Geben Sie BindingFlags.Public an, um öffentliche Member in die Suche einzubeziehen.

  • Geben Sie BindingFlags.NonPublic an, um nicht öffentliche Member, d. h. private und geschützte Member, in die Suche einzubeziehen.

  • Geben Sie BindingFlags.FlattenHierarchy an, um statische Member aus der gesamten Hierarchie in die Suche einzubeziehen.

Die Funktionsweise der Suche kann über die folgenden BindingFlags-Modifiziererflags beeinflusst werden:

  • BindingFlags.IgnoreCase, wenn die Groß- und Kleinschreibung von name nicht berücksichtigt werden soll.

  • BindingFlags.DeclaredOnly, wenn ausschließlich nach für Type deklarierten Membern gesucht werden soll und nicht nach Membern, die nur geerbt wurden.

Über die folgenden BindingFlags-Aufrufflags kann angegeben werden, welche Aktion für den Member durchgeführt werden soll:

  • CreateInstance zum Aufrufen eines Konstruktors. name wird ignoriert. Ungültig, wenn es mit anderen Aufrufflags verwendet wird.

  • InvokeMethod zum Aufrufen einer Methode, jedoch nicht zum Aufrufen eines Konstruktors oder eines Typinitialisierers. Ungültig, wenn es zusammen mit SetField oder SetProperty verwendet wird.

  • GetField zum Abrufen eines Feldwerts. Ungültig, wenn es zusammen mit SetField verwendet wird.

  • SetField zum Festlegen eines Feldwerts. Ungültig, wenn es zusammen mit GetField verwendet wird.

  • GetProperty zum Abrufen einer Eigenschaft. Ungültig, wenn es zusammen mit SetProperty verwendet wird.

  • SetProperty zum Festlegen einer Eigenschaft. Ungültig, wenn es zusammen mit GetProperty verwendet wird.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Eine Methode wird aufgerufen, wenn folgende Bedingungen erfüllt sind:

  • Die Anzahl der Parameter in der Methodendeklaration entspricht der Anzahl der Argumente im args-Array, sofern keine Standardargumente für den Member definiert sind.

  • Der Typ jedes Arguments kann vom Binder in den Typ des Parameters konvertiert werden.

Der Binder findet alle übereinstimmenden Methoden. Diese Methoden werden entsprechend dem angeforderten Bindungstyp gesucht (BindingFlags-Werte InvokeMethod, GetProperty usw.). Die Gruppe der Methoden wird nach Name, Anzahl der Argumente und einem im Binder definierten Satz von Suchmodifizierern gefiltert.

Nach der Auswahl einer Methode wird diese aufgerufen. An dieser Stelle wird die Zugriffsmöglichkeit überprüft. Bei der Suche kann anhand des der Methode zugeordneten Zugriffsattributs gesteuert werden, welche Gruppe von Methoden durchsucht wird. Die Binder.BindToMethod-Methode der Binder-Klasse ist für die Auswahl der aufzurufenden Methode zuständig. Der Standardbinder wählt die beste Entsprechung aus.

InvokeMember kann zum Aufrufen von Methoden mit Parametern verwendet werden, die Standardwerte besitzen. Zum Binden dieser Methoden muss für die Reflektion BindingFlags.OptionalParamBinding festgelegt werden. Bei einem Parameter mit einem Standardwert können Sie einen anderen Wert bereitstellen oder Missing.Value angeben, um den Standardwert zu verwenden.

Als Beispiel dient eine Methode wie MyMethod(int x, float y = 2.0). Wenn diese Methode nur mit dem ersten Argument aufgerufen werden soll, z. B. als MyMethod(4), übergeben Sie eines der oben genannten Bindungsflags und zwei Argumente, d. h. 4 für das erste Argument und Missing.Value für das zweite Argument. Sofern Sie Missing.Value nicht verwenden, dürfen Sie bei der Invoke-Methode keinen optionalen Parameter auslassen. Wenn dies unbedingt erforderlich ist, verwenden Sie stattdessen InvokeMember.

Bei vollständig vertrauenswürdigem Code werden Zugriffsbeschränkungen ignoriert. Daher ist das Zugreifen auf und das Aufrufen von privaten Konstruktoren, Methoden, Feldern und Eigenschaften bei vollständig vertrauenswürdigem Code über System.Reflection möglich.

Mit Type.InvokeMember können Sie ein Feld auf einen bestimmten Wert festlegen, indem Sie BindingFlags.SetField angeben. Wenn Sie z. B. das öffentliche Instanzenfeld F auf Klasse C festlegen möchten, und F ein String ist, können Sie folgenden Code verwenden:

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

Wenn F ein String[] ist, können Sie folgenden Code verwenden:

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

womit Feld F für dieses neue Array initialisiert wird. Sie können mit Type.InvokeMember auch eine Position in einem Array festlegen, indem Sie den Index des Werts und anschließend den Folgewert angeben, wobei Sie folgenden Code verwenden können:

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

Hiermit wird in dem in F enthaltenen Array die Zeichenfolge "z" in die Zeichenfolge "b" geändert.

Hinweis zu Windows Mobile 2003 für Pocket PC, Windows Mobile 2003 für Smartphone, Windows CE: Dieser Member löst unter .NET Compact Framework ein NotSupportedException aus.

Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 wird unter Windows Vista, Microsoft Windows XP SP2 und Windows Server 2003 SP1 unterstützt.

.NET Framework

Unterstützt in: 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

XNA Framework

Unterstützt in: 1.0
Anzeigen:
© 2015 Microsoft