Esporta (0) Stampa
Espandi tutto

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

Quando è sottoposto a override in una classe derivata, richiama il membro specificato, utilizzando i vincoli di associazione specificati e associando l'elenco di argomenti, i modificatori e la lingua specificati.

Spazio dei nomi: 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

Parametri

name

String contenente 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 il DispID, ad esempio "[DispID=3]".

invokeAttr

Maschera di bit costituita da uno o più BindingFlags che consentono 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, verrà applicato BindingFlags.Public | BindingFlags.Instance.

binder

Oggetto Binder che definisce una serie di proprietà e consente l'associazione, che può implicare la selezione di un metodo di overload, l'assegnazione forzata dei tipi di argomento e la chiamata di un membro mediante reflection.

-oppure-

riferimento null (Nothing in Visual Basic), per utilizzare DefaultBinder.

target

Object su cui richiamare il membro specificato.

args

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

modifiers

Matrice di oggetti ParameterModifier che rappresentano gli attributi associati all'elemento corrispondente nella matrice args. Gli attributi associati di un parametro sono memorizzati nella firma digitale del membro. Questo parametro non viene elaborato dal gestore di associazione predefinito.

culture

Oggetto CultureInfo che rappresenta le impostazioni internazionali da utilizzare, che possono essere necessarie per conversioni specifiche delle impostazioni internazionali, ad esempio la conversione di un valore numerico da String a Double.

-oppure-

riferimento null (Nothing in Visual Basic) per utilizzare il valore CultureInfo del thread corrente.

namedParameters

Matrice contenente i nomi dei parametri a cui sono passati i valori nella matrice args.

Valore restituito

Object che rappresenta il valore restituito del membro richiamato.

Tipo di eccezioneCondizione

ArgumentNullException

invokeAttr contiene CreateInstance e typeName è riferimento null (Nothing in Visual Basic).

ArgumentException

args è multidimensionale.

-oppure-

modifiers è multidimensionale.

-oppure-

args e modifiers non hanno la stessa lunghezza.

-oppure-

invokeAttr non è un attributo BindingFlags valido.

-oppure-

invokeAttr contiene CreateInstance e InvokeMethod, GetField, SetField, GetProperty oppure SetProperty.

-oppure-

invokeAttr contiene sia GetField sia SetField.

-oppure-

invokeAttr contiene sia GetProperty sia SetProperty.

-oppure-

invokeAttr contiene InvokeMethod e SetField oppure SetProperty.

-oppure-

invokeAttr contiene SetField e args ha più di un elemento.

-oppure-

La matrice di parametro nominata è più grande della matrice di argomento.

-oppure-

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

-oppure-

Una delle matrici di parametri nominate contiene una stringa riferimento null (Nothing in Visual Basic).

MethodAccessException

Il membro specificato è un inizializzatore di classi.

MissingFieldException

Impossibile trovare il campo o la proprietà.

MissingMethodException

Impossibile trovare il metodo.

-oppure-

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

TargetException

Il membro specificato non può essere richiamato su target.

AmbiguousMatchException

Più di un metodo corrisponde ai criteri di associazione.

InvokeMember chiama un membro di costruttore oppure un membro di metodo, ottiene o imposta un membro di proprietà, ottiene o imposta un membro di campo dati oppure ottiene o imposta un elemento di un membro di matrice.

Per richiamare un membro IDispatch, è possibile specificare il DispID invece del nome del membro, utilizzando il formato di stringa "[DispID=##]". Se ad esempio il DispID di MyComMethod è 3, è possibile specificare la stringa "[DispID=3]" invece di "MyComMethod". L'utilizzo del DispID per richiamare un membro risulta più rapido rispetto alla ricerca del membro in base al nome. In scenari di aggregazione complessi, l'utilizzo del DispID rappresenta talvolta l'unica soluzione per richiamare il membro desiderato.

Sebbene il gestore di associazione predefinito non elabori ParameterModifier o CultureInfo (i parametri modifiers e culture), è possibile utilizzare la classe astratta System.Reflection.Binder per scrivere un gestore di associazione personalizzato che elabori modifiers e culture. ParameterModifier viene utilizzato solo per le chiamate tramite interoperabilità COM e vengono gestiti solo parametri passati per riferimento.

La matrice args e la matrice modifiers hanno la stessa lunghezza. Un parametro specificato nella matrice args può avere i seguenti attributi, specificati nella matrice modifiers: pdIn, pdOut, pdLcid, pdRetval, pdOptional e pdHasDefault, che rappresentano [In], [Out], [lcid], [retval], [optional] e un valore che specifica se il parametro ha un valore predefinito. Gli attributi associati di un parametro vengono memorizzati nei metadati e migliorano l'interoperabilità.

Tutti i parametri nella matrice namedParameters ottengono il valore nell'elemento corrispondente della matrice args. Se la lunghezza di args è superiore a quella di namedParameters, i valori degli argomenti rimanenti vengono passati in ordine.

È possibile utilizzare i seguenti flag di filtro BindingFlags per definire i membri da includere nella ricerca:

  • Per ottenere un risultato è necessario specificare BindingFlags.Instance o BindingFlags.Static.

  • Specificare BindingFlags.Public per includere nella ricerca i membri pubblici.

  • Specificare BindingFlags.NonPublic per includere nella ricerca membri non pubblici, ovvero membri privati e protetti.

  • Specificare BindingFlags.FlattenHierarchy per includere membri statici nella gerarchia.

È possibile utilizzare i seguenti flag di modifica BindingFlags per modificare le modalità di esecuzione della ricerca:

  • BindingFlags.IgnoreCase per ignorare l'utilizzo di maiuscole e minuscole in name.

  • BindingFlags.DeclaredOnly per cercare solo i membri dichiarati su Type e non quelli semplicemente ereditati.

È possibile utilizzare i seguenti flag di chiamata BindingFlags per indicare l'azione da eseguire con il membro:

  • CreateInstance per richiamare un costruttore. name viene ignorato. Non valido con altri flag di chiamata.

  • InvokeMethod per richiamare un metodo, ma non un costruttore o un inizializzatore di tipo. Non valido con SetField o con SetProperty.

  • GetField per ottenere il valore di un campo. Non valido con SetField.

  • SetField per impostare un valore di un campo. Non valido con GetField.

  • GetProperty per ottenere una proprietà. Non valido con SetProperty.

  • SetProperty per impostare una proprietà. Non valido con GetProperty.

Per ulteriori informazioni, vedere System.Reflection.BindingFlags.

Se le seguenti condizioni sono true, viene richiamato un metodo:

  • Il numero di parametri nella dichiarazione del metodo è uguale al numero di argomenti nella matrice args (a meno che gli argomenti predefiniti siano definiti sul membro).

  • Il tipo di ogni argomento può essere convertito dal gestore di associazione nel tipo del parametro.

Il gestore di associazione troverà tutti i metodi corrispondenti. I metodi vengono rilevati in base al tipo di associazione richiesta (valori BindingFlagsInvokeMethod, GetProperty e così via). Il gruppo di metodi viene filtrato in base al nome, al numero di argomenti e al gruppo di modificatori di ricerca definiti nel gestore di associazione.

Dopo essere stato selezionato, il metodo viene richiamato, quindi viene verificata l'accessibilità. È possibile specificare in quali gruppi di metodi eseguire la ricerca in base all'attributo di accessibilità associato al metodo. Il metodo Binder.BindToMethod della classe Binder è responsabile della selezione del metodo da richiamare. L'associatore predefinito seleziona la corrispondenza più specifica.

È possibile utilizzare InvokeMember per richiamare i metodi con parametri che dispongono di valori predefiniti. Per effettuare l'associazione a tali metodi, la reflection richiede che sia specificato il campo BindingFlags.OptionalParamBinding. Per un parametro che dispone di un valore predefinito è possibile fornire un diverso valore oppure il campo Missing.Value per utilizzare il valore predefinito.

Si consideri ad esempio un metodo del tipo MyMethod(int x, float y = 2.0). Per richiamare questo metodo soltanto con il primo argomento quale MyMethod(4), passare uno dei flag di associazione descritti in precedenza e altri due argomenti, precisamente 4 per il primo argomento e Missing.Value per il secondo. A meno che non si utilizzi Missing.Value, con il metodo Invoke non è possibile omettere i parametri facoltativi. Se necessario, utilizzare invece InvokeMember.

Le restrizioni di accesso vengono ignorate per i codici completamente attendibili. Se il codice è completamente attendibile è quindi possibile accedere a costruttori, metodi, campi e proprietà privati e richiamarli mediante System.Reflection.

È possibile utilizzare Type.InvokeMember per impostare un campo su un valore particolare, specificando il campo BindingFlags.SetField. Se, ad esempio, si desidera impostare un campo di istanza pubblica denominato F sulla classe C, e F è String, è possibile utilizzare una stringa di codice quale:

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

Se F è String[], è possibile utilizzare una stringa di codice quale:

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

in modo da inizializzare il campo F alla nuova matrice. È inoltre possibile utilizzare Type.InvokeMember per impostare una posizione in una matrice fornendo l'indice del valore, quindi il valore successivo utilizzando codice simile al seguente:

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

La stringa "z" della matrice contenuta da F viene cambiata nella stringa "b".

Windows 98, Windows 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

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft