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 DynamicMethod.Invoke (Object, BindingFlags, Binder, Object[], CultureInfo)

 

Data di pubblicazione: ottobre 2016

Richiama il metodo dinamico usando i parametri specificati, con i vincoli del binder specificato e le informazioni sulle impostazioni cultura specificate.

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

public override object Invoke(
	object obj,
	BindingFlags invokeAttr,
	Binder binder,
	object[] parameters,
	CultureInfo culture
)

Parametri

obj
Type: System.Object

Questo parametro viene ignorato per i metodi dinamici, in quanto sono statici. Specificare null.

invokeAttr
Type: System.Reflection.BindingFlags

Combinazione bit per bit dei valori di BindingFlags.

binder
Type: System.Reflection.Binder

Oggetto Binder che consente il binding, la coercizione di tipi di argomento, la chiamata di membri e il recupero di oggetti MemberInfo tramite la reflection. Se binder è null, verrà usato il binder predefinito. Per informazioni dettagliate, vedere Binder.

parameters
Type: System.Object[]

Elenco di argomenti. Matrice di argomenti con lo stesso numero, ordine e tipo dei parametri del metodo da richiamare. In assenza di parametri, questo parametro deve essere null.

culture
Type: System.Globalization.CultureInfo

Istanza di CultureInfo usata per regolare la coercizione dei tipi. Se è null, per il thread corrente verrà usato l'oggetto CultureInfo. Queste informazioni sono necessarie, ad esempio, per convertire in modo corretto un valore String che rappresenta 1000 in un valore Double, perché 1000 viene rappresentato in modo diverso nelle diverse impostazioni cultura.

Valore restituito

Type: System.Object

Oggetto Object che contiene il valore restituito del metodo richiamato.

Exception Condition
NotSupportedException

La convenzione di chiamata CallingConventions.VarArgs non è supportata.

TargetParameterCountException

Il numero di elementi in parameters non corrisponde al numero dei parametri del metodo dinamico.

ArgumentException

Il tipo di uno o più elementi di parameters non corrisponde al tipo del parametro corrispondente del metodo dinamico.

TargetInvocationException

Il metodo dinamico è associato a un modulo, non è ospitato in modo anonimo ed è costruito con skipVisibility impostato su false, ma accede a membri che non sono public o internal (Friend in Visual Basic).

-oppure-

Il metodo dinamico è ospitato in modo anonimo ed è costruito con skipVisibility impostato su false, ma accede a membri che non sono public.

-oppure-

Il metodo dinamico contiene codice non verificabile. Vedere la sezione "Verifica" nelle note per DynamicMethod.

Oltre alle eccezioni elencate, il codice chiamante deve essere preparato per intercettare eventuali eccezioni generate dal metodo dinamico.

L'esecuzione di un metodo dinamico con un delegato creato dal CreateDelegate metodo risulta più efficiente rispetto all'esecuzione con il Invoke metodo.

La chiamata di Invoke metodo o CreateDelegate metodo viene completato il metodo dinamico. Qualsiasi ulteriore tenta di modificare il metodo dinamico, ad esempio la modifica di definizioni di parametro o la creazione di ulteriori Microsoft intermediate language (MSIL), viene ignorato. viene generata alcuna eccezione.

Tutti i metodi dinamici sono statici, in modo che il obj parametro viene sempre ignorato. Per considerare un metodo dinamico come se fosse un metodo di istanza, utilizzare il CreateDelegate(Type, Object) overload che accetta un'istanza dell'oggetto.

Se il metodo dinamico non dispone di parametri, il valore di parameters deve essere null. In caso contrario, il numero, tipo e l'ordine degli elementi nella matrice di parametri deve essere identici al tipo, di numero e ordine dei parametri del metodo dinamico.

System_CAPS_noteNota

Questo overload del metodo viene chiamato dal Invoke(Object, Object[]) overload del metodo ereditato dalla MethodBase classe, pertanto la sezione Osservazioni precedente si applica a entrambi gli overload.

Questo metodo non richiede le autorizzazioni direttamente, ma la chiamata al metodo dinamico può causare richieste di sicurezza, a seconda del metodo. Ad esempio, non viene effettuata per metodi dinamici ospitati anonimamente creati con il restrictedSkipVisibility parametro impostato su false. D'altra parte, se si crea un metodo con restrictedSkipVisibility impostato su true in modo che possa accedere un membro nascosto di un assembly di destinazione, il metodo genererà una richiesta per le autorizzazioni dell'assembly di destinazione più ReflectionPermission con il ReflectionPermissionFlag.MemberAccess flag.

System_CAPS_noteNota

Nelle versioni precedenti a di .NET Framework 2.0 Service Pack 1, questo metodo richiedeva ReflectionPermission con il MemberAccess flag.

Esempio di codice seguente richiama un metodo dinamico con associazione esatta, utilizzando le impostazioni cultura inglese Stati Uniti. Questo esempio di codice fa parte di un esempio più esaustivo fornito per la DynamicMethod classe.

Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);

.NET Framework
Disponibile da 2.0
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.1
Torna all'inizio
Mostra: