Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Type.InvokeMember (String, BindingFlags, Binder, Object, Object[], CultureInfo)

 

Chiama il membro specificato, usando i vincoli di binding specificati e associando l'elenco di argomenti specificati e le impostazioni cultura.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

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

Parametri

name
Type: System.String

Stringa che contiene il nome del costruttore, del metodo, della proprietà o del membro del campo da richiamare.

-oppure-

Stringa vuota ("") per richiamare il membro predefinito.

-oppure-

Per i membri IDispatch, stringa che rappresenta DispID, ad esempio "[DispID=3]".

invokeAttr
Type: System.Reflection.BindingFlags

Maschera di bit costituita da uno o più BindingFlags che consente di specificare le modalità di esecuzione della ricerca. L'accesso può essere uno dei BindingFlags, ad esempio Public, NonPublic, Private, InvokeMethod, GetField e così via. Il tipo di ricerca non deve essere specificato. Se il tipo di ricerca viene omesso, vengono usati BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.

binder
Type: System.Reflection.Binder

Oggetto che definisce una serie di proprietà e permette il binding, che può implicare la scelta di un metodo di overload, la coercizione di tipi di argomento e la chiamata di un membro mediante reflection.

-oppure-

Riferimento Null (Nothing in Visual Basic) per l'uso di DefaultBinder. Si noti che potrebbe essere necessario definire in modo esplicito un oggetto Binder per richiamare correttamente overload di metodo con argomenti variabili.

target
Type: System.Object

Oggetto su cui richiamare il membro specificato.

args
Type: System.Object[]

Matrice che contiene gli argomenti da passare al membro da richiamare.

culture
Type: System.Globalization.CultureInfo

Oggetto che rappresenta le impostazioni locali di globalizzazione da usare, che possono essere necessarie per conversioni specifiche delle impostazioni locali, ad esempio la conversione di un oggetto String numerico in Double.

-oppure-

Riferimento Null (Nothing in Visual Basic) per l'uso dell'oggetto CultureInfo del thread corrente.

Valore restituito

Type: System.Object

Oggetto che rappresenta il valore restituito di un membro richiamato.

Exception Condition
ArgumentNullException

invokeAttr non contiene CreateInstance e name è null.

ArgumentException

invokeAttr non è un attributo valido di BindingFlags.

-oppure-

invokeAttr non contiene uno dei flag di binding seguenti: InvokeMethod, CreateInstance, GetField, SetField, GetProperty o SetProperty.

-oppure-

invokeAttr contiene CreateInstance in combinazione con InvokeMethod, GetField, SetField, GetProperty o SetProperty.

-oppure-

invokeAttr contiene sia GetField che SetField.

-oppure-

invokeAttr contiene sia GetProperty che SetProperty.

-oppure-

invokeAttr contiene InvokeMethod in combinazione con SetField o SetProperty.

-oppure-

invokeAttr contiene SetField e args include più elementi.

-oppure-

Questo metodo è stato chiamato su un oggetto COM e uno dei flag di binding seguenti non è stato passato: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty o BindingFlags.PutRefDispProperty.

-oppure-

Una delle matrici di parametri denominati contiene una stringa null.

MethodAccessException

Il membro specificato è un inizializzatore di classi.

MissingFieldException

Non è possibile trovare il campo o la proprietà.

MissingMethodException

Non è possibile trovare metodi corrispondenti agli argomenti in args.

-oppure-

L'oggetto Type corrente rappresenta un tipo che contiene parametri di tipo open, ovvero ContainsGenericParameters restituisce true.

TargetException

Non è possibile richiamare il metodo specificato su target.

AmbiguousMatchException

Più di un metodo corrisponde ai criteri di binding.

InvalidOperationException

Il metodo rappresentato da name include uno o più parametri di tipo generico non specificati. In altri termini, la proprietà ContainsGenericParameters del metodo restituisce true.

Although the default binder does not process T:System.Globalization.CultureInfo (the cultureparameter), you can use the abstract T:System.Reflection.Binder class to write a custom binder that does process culture.

System_CAPS_noteNota

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

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.

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.

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

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

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

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

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.

System_CAPS_noteNota

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
Disponibile da 1.1
Torna all'inizio
Mostra: