(0) exportieren Drucken
Alle erweitern

Type.InvokeMember-Methode (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Aktualisiert: November 2007

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

Parameter

name
Typ: System.String
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
Typ: 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 ausgelassen wird, gilt BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.
binder
Typ: System.Reflection.Binder
Ein Binder-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 –
null, wenn der 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
Typ: System.Object
Das Object, für das der angegebene Member aufgerufen werden soll.
args
Typ: System.Object[]
Ein Array mit den Argumenten, die dem aufzurufenden Member übergeben werden sollen.
modifiers
Typ: 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
Typ: 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 –
null, wenn die CultureInfo des aktuellen Threads verwendet werden soll.
namedParameters
Typ: System.String[]
Ein Array mit den Namen der Parameter, an die die Elemente des args-Arrays übergeben werden.

Rückgabewert

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

Implementiert

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

AusnahmeBedingung
ArgumentNullException

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

ArgumentException

args und modifiers haben nicht dieselbe Länge.

– 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 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 ist.

MethodAccessException

Der angegebene Member ist ein Klasseninitialisierer.

MissingFieldException

Das Feld oder die Eigenschaft kann nicht gefunden werden.

MissingMethodException

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

– oder –

Es kann kein Member kann gefunden werden, der über die in namedParameters angegebenen Argumentnamen verfügt.

– 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. Dies bedeutet, dass die ContainsGenericParameters-Eigenschaft der Methode true zurückgibt.

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.

de3dhzwy.alert_note(de-de,VS.90).gifHinweis:

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.

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.

Das namedParameters-Array kann verwendet werden, um die Reihenfolge von Argumenten in einem Eingabearray zu ändern. Wenn z. B. die Methode M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) und das Eingabearray { 42, "x" } angegeben werden, kann das Eingabearray unverändert an args übergeben werden, wenn für namedParameters das Array { "b", "a" } angegeben wird.

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

  • 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. Wenn lediglich InvokeMethod angegeben wird, werden BindingFlags.Public, BindingFlags.Instance und BindingFlags.Static automatisch eingeschlossen.

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

de3dhzwy.alert_note(de-de,VS.90).gifHinweis:

Ab .NET Framework Version 2.0 Service Pack 1 kann mit dieser Methode auf nicht öffentliche Member zugegriffen werden, wenn dem Aufrufer ReflectionPermission mit dem ReflectionPermissionFlag.RestrictedMemberAccess-Flag gewährt wurde und der Berechtigungssatz der nicht öffentlichen Member auf den Berechtigungssatz des Aufrufers oder auf eine Teilmenge dieses Berechtigungssatzes beschränkt ist. (Siehe Sicherheitsüberlegungen für die Reflektion.)

Zum Verwenden dieser Funktionen sollte die Anwendung für .NET Framework Version 3.5 ausgelegt sein. Weitere Informationen finden Sie unter Architektur von .NET Framework 3.5 .

Hinweis zu Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows CE:

Dieser Member löst unter .NET Compact Framework ein NotSupportedException aus.

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

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

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

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft