TypeDelegator.InvokeMember Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Richiama il membro specificato. Il metodo che deve essere richiamato deve essere accessibile e fornire la corrispondenza più specifica con l'elenco di argomenti specificato, in base ai vincoli del binder e degli attributi di chiamata specificati.
public:
override System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public override object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Overrides Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object
Parametri
- name
- String
Nome del membro da richiamare. Può trattarsi di un costruttore, un metodo, una proprietà o un campo. Se viene passata una stringa vuota (""), viene richiamato il membro predefinito.
- invokeAttr
- BindingFlags
Attributo di chiamata. Deve essere uno dei seguenti BindingFlags : InvokeMethod, CreateInstance, Static, GetFieldSetField, , GetPropertyo SetProperty. È necessario specificare un attributo di chiamata appropriato. Se un membro statico deve essere richiamato, è necessario impostare il Static flag .
- binder
- Binder
Oggetto che consente l'associazione, la coercizione dei tipi di argomento, la chiamata di membri e il recupero di MemberInfo oggetti tramite reflection. Se binder è null, viene usato il gestore di associazione predefinito. Vedete Binder.
- target
- Object
Oggetto sul quale richiamare il membro specificato.
- args
- Object[]
Matrice di tipo Object che contiene il numero, l'ordine e il tipo dei parametri del membro da richiamare. Se args contiene un oggetto non inizializzato Object, viene considerato vuoto, che con il binder predefinito può essere esteso a 0, 0,0 o una stringa.
- modifiers
- ParameterModifier[]
Matrice di tipo ParameterModifier uguale a args, con elementi che rappresentano gli attributi associati agli argomenti del membro da richiamare. A un parametro sono associati attributi nella firma del membro. Per ByRef, usare ParameterModifier.ByRefe per nessuno, usare ParameterModifier.None. Il gestore di associazione predefinito esegue la corrispondenza esatta su questi elementi. Gli attributi come In e InOut non vengono usati nell'associazione e possono essere visualizzati tramite ParameterInfo.
- culture
- CultureInfo
Istanza di CultureInfo utilizzata per gestire la coercizione dei tipi. Ciò è necessario, ad esempio, per convertire una stringa che rappresenta 1000 in un Double valore, poiché 1000 è rappresentato in modo diverso da impostazioni cultura diverse. Se culture è null, viene usato per CultureInfo il thread CultureInfo corrente.
- namedParameters
- String[]
Matrice di stringhe contenente nomi di parametri corrispondenti, a partire dall'elemento zero, con la args matrice. Non ci devono essere fori nella matrice. Se args.
Length è maggiore di namedParameters.
Length, i parametri rimanenti vengono compilati in ordine.
Valori restituiti
Oggetto Object che rappresenta il valore restituito del membro richiamato.
- Attributi
Commenti
Se entrambe le condizioni seguenti sono vere, verrà richiamato un metodo:
Il numero di parametri nella dichiarazione del metodo è uguale al numero di argomenti nell'elenco di argomenti specificato (a meno che non siano definiti argomenti predefiniti nel membro).
Il tipo di ogni argomento può essere convertito dal binder nel tipo del parametro .
Il binder troverà tutti i metodi corrispondenti. Questi metodi vengono trovati in base al tipo di associazione richiesta (BindingFlags.MethodInvoke, BindingFlags.GetPropertiese così via). Il set di metodi viene filtrato in base al nome, al numero di argomenti e a un set di modificatori di ricerca definiti nel binder.
Dopo aver selezionato il metodo, verrà richiamato. L'accessibilità viene verificata a quel punto. La ricerca può controllare il set di metodi di ricerca in base all'attributo di accessibilità associato al metodo . Il Binder.BindToMethod metodo è responsabile della selezione del metodo da richiamare. Il gestore di associazione predefinito seleziona la corrispondenza più specifica.
Note
Le restrizioni di accesso vengono ignorate per il codice completamente attendibile. Ovvero, i costruttori privati, i metodi, i campi e le proprietà possono essere accessibili e richiamati tramite reflection ogni volta che il codice è completamente attendibile.
Attualmente, InvokeMember esegue la semantica di reflection di Microsoft .NET Framework per ogni tipo di oggetto.
Se il membro specificato per nome è una matrice e il BindingFlags.GetField flag è impostato su invokeAttr, la args matrice specifica gli elementi i cui valori devono essere restituiti. Ad esempio, la chiamata seguente tramite Type oggetto t restituisce il valore del primo elemento della matrice di stringhe MyArray, che è un membro dell'oggetto chiamante:
String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});
È possibile usare InvokeMember per impostare uno o più elementi di una matrice di membri. Tutti gli elementi vengono impostati sullo stesso valore. La args matrice deve essere formattata come segue:
{index1,
index2,, value}
Ad esempio, per impostare il primo membro di MyArray dell'esempio precedente, la sintassi è la seguente:
t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new
Variant[]{0,"Updated"});