Type.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 un membro specifico dell'oggetto corrente Type.
Overload
| Nome | Descrizione |
|---|---|
| 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, modificatori e impostazioni cultura specificati. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) |
Richiama il membro specificato, utilizzando i vincoli di associazione specificati e associando l'elenco di argomenti e le impostazioni cultura specificati. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[]) |
Richiama il membro specificato, utilizzando i vincoli di associazione specificati e associando l'elenco di argomenti specificato. |
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Quando sottoposto a override in una classe derivata, richiama il membro specificato, utilizzando i vincoli di associazione specificati e associando l'elenco di argomenti, modificatori e impostazioni cultura specificati.
public:
abstract 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 abstract 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 abstract 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 abstract 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 abstract 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)>]
abstract member 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)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public MustOverride 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
Stringa 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 IDispatch i membri, una stringa che rappresenta il DispID, ad esempio "[DispID=3]".
- invokeAttr
- BindingFlags
Combinazione bit per bit dei valori di enumerazione che specificano come viene eseguita la ricerca. L'accesso può essere uno di BindingFlags , ad esempio Public, NonPublic, InvokeMethodPrivate, , GetFielde così via. Non è necessario specificare il tipo di ricerca. Se il tipo di ricerca viene omesso, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static vengono utilizzati.
- binder
- Binder
Oggetto che definisce un set di proprietà e abilita l'associazione, che può comportare la selezione di un metodo di overload, la coercizione dei tipi di argomento e la chiamata di un membro tramite reflection.
oppure
Riferimento Null (Nothing in Visual Basic), per usare il DefaultBinder. Si noti che la definizione esplicita di un Binder oggetto può essere necessaria per richiamare correttamente gli overload del metodo con argomenti variabili.
- target
- Object
Oggetto sul quale richiamare il membro specificato.
- args
- Object[]
Matrice contenente gli argomenti da passare al membro da richiamare.
- modifiers
- ParameterModifier[]
Matrice di ParameterModifier oggetti che rappresentano gli attributi associati all'elemento corrispondente nella args matrice. Gli attributi associati di un parametro vengono archiviati nella firma del membro.
Il gestore di associazione predefinito elabora questo parametro solo quando si chiama un componente COM.
- culture
- CultureInfo
Oggetto CultureInfo che rappresenta le impostazioni locali di globalizzazione da utilizzare, che può essere necessario per le conversioni specifiche delle impostazioni locali, ad esempio la conversione di una stringa numerica in un valore Double.
oppure
Riferimento Null (Nothing in Visual Basic) per usare il CultureInfo del thread corrente.
- namedParameters
- String[]
Matrice contenente i nomi dei parametri a cui vengono passati i valori nella args matrice.
Valori restituiti
Oggetto che rappresenta il valore restituito del membro richiamato.
Implementazioni
- Attributi
Eccezioni
invokeAttr non contiene CreateInstance e name è null.
args e modifiers non hanno la stessa lunghezza.
oppure
invokeAttr non è un attributo valido BindingFlags .
oppure
invokeAttrnon contiene uno dei flag di associazione seguenti: InvokeMethod, CreateInstance, GetFieldSetField, GetProperty, o SetProperty.
oppure
invokeAttrcontiene in CreateInstance combinazione con InvokeMethod, GetFieldSetField, GetProperty, o SetProperty.
oppure
invokeAttr contiene sia GetField che SetField.
oppure
invokeAttr contiene sia GetProperty che SetProperty.
oppure
invokeAttr contiene in InvokeMethod combinazione con SetField o SetProperty.
oppure
invokeAttr contiene SetField e args ha più di un elemento.
oppure
La matrice di parametri denominata è maggiore della matrice di argomenti.
oppure
Questo metodo viene chiamato su un oggetto COM e uno dei flag di associazione seguenti non è stato passato in: BindingFlags.InvokeMethod, BindingFlags.GetPropertyBindingFlags.SetProperty, BindingFlags.PutDispProperty, o BindingFlags.PutRefDispProperty.
oppure
Una delle matrici di parametri denominate contiene una stringa che è null.
Il membro specificato è un inizializzatore di classe.
Impossibile trovare il campo o la proprietà.
Non è possibile trovare alcun metodo che corrisponda agli argomenti in args.
oppure
Non è possibile trovare alcun membro con i nomi degli argomenti specificati in namedParameters.
oppure
L'oggetto corrente Type rappresenta un tipo che contiene parametri di tipo aperti, ovvero restituisce ContainsGenericParameterstrue.
Il membro specificato non può essere richiamato su target.
Più metodi corrispondono ai criteri di associazione.
Il metodo rappresentato da name ha uno o più parametri di tipo generico non specificati. Ovvero, la proprietà del ContainsGenericParameters metodo restituisce true.
Commenti
InvokeMember chiama un membro del costruttore o un membro del metodo, ottiene o imposta un membro della proprietà, ottiene o imposta un membro del campo dati oppure ottiene o imposta un elemento di un membro di matrice.
Annotazioni
Non è possibile usare InvokeMember per richiamare un metodo generico.
Quando si richiama un IDispatch membro, è possibile specificare DispID anziché il nome del membro, usando il formato stringa "[DispID=##]". Ad esempio, se Il valore DispID di MyComMethod è 3, è possibile specificare la stringa "[DispID=3]" anziché "MyComMethod". Richiamare un membro da DispID è più veloce rispetto alla ricerca del membro in base al nome. In scenari di aggregazione complessi, DispID è talvolta l'unico modo per richiamare il membro desiderato.
Anche se il gestore di associazione predefinito non elabora ParameterModifier o (i modifiers parametri e culture ), è possibile usare la classe astratta System.Reflection.Binder per scrivere un binder personalizzato che elabora modifiers e culture.CultureInfo
ParameterModifier viene utilizzato solo quando si esegue la chiamata tramite interoperabilità COM e vengono gestiti solo i parametri passati per riferimento.
Ogni parametro nella namedParameters matrice ottiene il valore nell'elemento corrispondente nella args matrice. Se la lunghezza di è maggiore della lunghezza di argsnamedParameters, i valori dell'argomento rimanenti vengono passati in ordine.
La namedParameters matrice può essere usata per modificare l'ordine degli argomenti in una matrice di input. Ad esempio, dato il metodo M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) e la matrice di input { 42, "x" }, la matrice di input può essere passata a args se la matrice { "b", "a" } viene fornita per namedParameters.
Per definire i membri da includere nella ricerca, è possibile usare i flag di filtro seguenti BindingFlags :
Specificare
BindingFlags.Publicper includere i membri pubblici nella ricerca.Specificare
BindingFlags.NonPublicdi includere membri non pubblici , ovvero membri privati, interni e protetti, nella ricerca.Specificare
BindingFlags.FlattenHierarchyper includere membri statici nella gerarchia.
Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :
BindingFlags.IgnoreCaseper ignorare il caso diname.BindingFlags.DeclaredOnlyper cercare solo i membri dichiarati in Type, non i membri semplicemente ereditati.
I flag di chiamata seguenti BindingFlags possono essere usati per indicare l'azione da eseguire con il membro:
CreateInstanceper richiamare un costruttore.nameviene ignorato. Non valido con altri flag di chiamata.InvokeMethodper richiamare un metodo, ma non un costruttore o un inizializzatore di tipo. Non valido conSetFieldoSetProperty. SeInvokeMethodè specificato da se stesso,BindingFlags.Public,BindingFlags.InstanceeBindingFlags.Staticvengono inclusi automaticamente.GetFieldper ottenere il valore di un campo. Non valido conSetField.SetFieldper impostare il valore di un campo. Non valido conGetField.GetPropertyper ottenere una proprietà. Non valido conSetProperty.SetPropertyper impostare una proprietà. Non valido conGetProperty.
Per altre informazioni, vedere System.Reflection.BindingFlags.
Un metodo verrà richiamato se entrambe le condizioni seguenti sono vere:
Il numero di parametri nella dichiarazione del metodo è uguale al numero di argomenti nella
argsmatrice (a meno che non siano definiti argomenti predefiniti nel membro eBindingFlags.OptionalParamBindingsia specificato).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 richiesto (BindingFlags valori InvokeMethod, GetPropertye 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, viene 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 della Binder classe è responsabile della selezione del metodo da richiamare. Il gestore di associazione predefinito seleziona la corrispondenza più specifica.
InvokeMember può essere usato per richiamare metodi con parametri con valori predefiniti. Per eseguire l'associazione a questi metodi, è necessario BindingFlags.OptionalParamBinding specificare Reflection. Per un parametro con un valore predefinito, è possibile specificare un valore diverso oppure specificare Missing.Value per usare il valore predefinito.
Si consideri ad esempio un metodo come MyMethod(int x, float y = 2.0). Per richiamare questo metodo con solo il primo argomento come MyMethod(4), passare uno dei flag di associazione precedenti e passare due argomenti, ovvero 4 per il primo argomento e Missing.Value per il secondo argomento. A meno che non si usi Missing.Value, non è possibile omettere parametri facoltativi con il Invoke metodo . In questo caso, usare InvokeMember invece .
Le restrizioni di accesso vengono ignorate per il codice completamente attendibile; ovvero costruttori privati, metodi, campi e proprietà possono essere accessibili e richiamati ogni System.Reflection volta che il codice è completamente attendibile.
È possibile usare Type.InvokeMember per impostare un campo su un determinato valore specificando BindingFlags.SetField. Ad esempio, se si vuole impostare un campo di istanza pubblica denominato F nella classe C e F è un String, è possibile usare codice come:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);
Se F è un String[], è possibile usare codice come:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);
che inizializzerà il campo F in questa nuova matrice. È anche possibile usare Type.InvokeMember per impostare una posizione in una matrice specificando l'indice del valore e quindi il valore successivo usando codice come il seguente:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);
Verrà modificata la stringa "z" nella matrice che F contiene nella stringa "b".
Annotazioni
Questo metodo può essere usato per accedere a membri non pubblici se il chiamante è stato concesso ReflectionPermission con il ReflectionPermissionFlag.RestrictedMemberAccess flag e se il set di concessioni dei membri non pubblici è limitato al set di concessioni del chiamante o a un subset. Vedere Considerazioni sulla sicurezza per reflection.
Per usare questa funzionalità, l'applicazione deve avere come destinazione .NET Framework 3.5 o versione successiva.
Vedi anche
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Si applica a
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Richiama il membro specificato, utilizzando i vincoli di associazione specificati e associando l'elenco di argomenti e le impostazioni cultura specificati.
public:
System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public:
virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
[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 object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<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)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object
Parametri
- name
- String
Stringa 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 IDispatch i membri, una stringa che rappresenta il DispID, ad esempio "[DispID=3]".
- invokeAttr
- BindingFlags
Combinazione bit per bit dei valori di enumerazione che specificano come viene eseguita la ricerca. L'accesso può essere uno di BindingFlags , ad esempio Public, NonPublic, InvokeMethodPrivate, , GetFielde così via. Non è necessario specificare il tipo di ricerca. Se il tipo di ricerca viene omesso, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static vengono utilizzati.
- binder
- Binder
Oggetto che definisce un set di proprietà e abilita l'associazione, che può comportare la selezione di un metodo di overload, la coercizione dei tipi di argomento e la chiamata di un membro tramite reflection.
oppure
Riferimento Null (Nothing in Visual Basic), per usare il DefaultBinder. Si noti che la definizione esplicita di un Binder oggetto può essere necessaria per richiamare correttamente gli overload del metodo con argomenti variabili.
- target
- Object
Oggetto sul quale richiamare il membro specificato.
- args
- Object[]
Matrice contenente gli argomenti da passare al membro da richiamare.
- culture
- CultureInfo
Oggetto che rappresenta le impostazioni locali di globalizzazione da utilizzare, che può essere necessario per le conversioni specifiche delle impostazioni locali, ad esempio la conversione di un valore numerico String in un oggetto Double.
oppure
Riferimento Null (Nothing in Visual Basic) per usare il CultureInfo del thread corrente.
Valori restituiti
Oggetto che rappresenta il valore restituito del membro richiamato.
Implementazioni
- Attributi
Eccezioni
invokeAttr non contiene CreateInstance e name è null.
invokeAttr non è un attributo valido BindingFlags .
oppure
invokeAttrnon contiene uno dei flag di associazione seguenti: InvokeMethod, CreateInstance, GetFieldSetField, GetProperty, o SetProperty.
oppure
invokeAttrcontiene in CreateInstance combinazione con InvokeMethod, GetFieldSetField, GetProperty, o SetProperty.
oppure
invokeAttr contiene sia GetField che SetField.
oppure
invokeAttr contiene sia GetProperty che SetProperty.
oppure
invokeAttr contiene in InvokeMethod combinazione con SetField o SetProperty.
oppure
invokeAttr contiene SetField e args ha più di un elemento.
oppure
Questo metodo viene chiamato su un oggetto COM e uno dei flag di associazione seguenti non è stato passato in: BindingFlags.InvokeMethod, BindingFlags.GetPropertyBindingFlags.SetProperty, BindingFlags.PutDispProperty, o BindingFlags.PutRefDispProperty.
oppure
Una delle matrici di parametri denominate contiene una stringa che è null.
Il membro specificato è un inizializzatore di classe.
Impossibile trovare il campo o la proprietà.
Non è possibile trovare alcun metodo che corrisponda agli argomenti in args.
oppure
L'oggetto corrente Type rappresenta un tipo che contiene parametri di tipo aperti, ovvero restituisce ContainsGenericParameterstrue.
Il membro specificato non può essere richiamato su target.
Più metodi corrispondono ai criteri di associazione.
Il metodo rappresentato da name ha uno o più parametri di tipo generico non specificati. Ovvero, la proprietà del ContainsGenericParameters metodo restituisce true.
Commenti
Anche se il binder predefinito non elabora CultureInfo (il parametro culture), è possibile usare la classe astratta System.Reflection.Binder per scrivere un binder personalizzato che esegue l'elaborazione di culture.
Annotazioni
Non è possibile usare InvokeMember per richiamare un metodo generico.
Per definire i membri da includere nella ricerca, è possibile usare i flag di filtro seguenti BindingFlags :
Specificare
BindingFlags.Publicper includere i membri pubblici nella ricerca.Specificare
BindingFlags.NonPublicdi includere membri non pubblici , ovvero membri privati, interni e protetti, nella ricerca.Specificare
BindingFlags.FlattenHierarchyper includere membri statici nella gerarchia.
Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :
BindingFlags.IgnoreCaseper ignorare il caso diname.BindingFlags.DeclaredOnlyper cercare solo i membri dichiarati in Type, non i membri semplicemente ereditati.
I flag di chiamata seguenti BindingFlags possono essere usati per indicare l'azione da eseguire con il membro:
CreateInstanceper richiamare un costruttore.nameviene ignorato. Non valido con altri flag di chiamata.InvokeMethodper richiamare un metodo, ma non un costruttore o un inizializzatore di tipo. Non valido conSetFieldoSetProperty. SeInvokeMethodè specificato da se stesso,BindingFlags.Public,BindingFlags.InstanceeBindingFlags.Staticvengono inclusi automaticamente.GetFieldper ottenere il valore di un campo. Non valido conSetField.SetFieldper impostare il valore di un campo. Non valido conGetField.GetPropertyper ottenere una proprietà. Non valido conSetProperty.SetPropertyper impostare una proprietà. Non valido conGetProperty.
Per altre informazioni, vedere System.Reflection.BindingFlags.
Un metodo verrà richiamato se entrambe le condizioni seguenti sono vere:
Il numero di parametri nella dichiarazione del metodo è uguale al numero di argomenti nella
argsmatrice (a meno che non siano definiti argomenti predefiniti nel membro eBindingFlags.OptionalParamBindingsia specificato).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 richiesto (BindingFlags valori InvokeMethod, GetPropertye 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, viene 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 della Binder classe è responsabile della selezione del metodo da richiamare. Il gestore di associazione predefinito seleziona la corrispondenza più specifica.
Le restrizioni di accesso vengono ignorate per il codice completamente attendibile; ovvero, costruttori privati, metodi, campi e proprietà possono essere accessibili e richiamati tramite Reflection ogni volta che il codice è completamente attendibile.
È possibile usare Type.InvokeMember per impostare un campo su un determinato valore specificando BindingFlags.SetField. Ad esempio, se si vuole impostare un campo di istanza pubblica denominato F nella classe C e F è possibile String usare codice come:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);
Se F è un String[], è possibile usare codice come:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);
che inizializzerà il campo F in questa nuova matrice. È anche possibile usare Type.InvokeMember per impostare una posizione in una matrice specificando l'indice del valore e quindi il valore successivo usando codice come il seguente:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);
Verrà modificata la stringa "z" nella matrice che F contiene nella stringa "b".
Quando si richiama un IDispatch membro, è possibile specificare DispID anziché il nome del membro, usando il formato stringa "[DispID=##]". Ad esempio, se Il valore DispID di MyComMethod è 3, è possibile specificare la stringa "[DispID=3]" anziché "MyComMethod". Richiamare un membro da DispID è più veloce rispetto alla ricerca del membro in base al nome. In scenari di aggregazione complessi, DispID è talvolta l'unico modo per richiamare il membro desiderato.
Annotazioni
Questo metodo può essere usato per accedere a membri non pubblici se il chiamante è stato concesso ReflectionPermission con il ReflectionPermissionFlag.RestrictedMemberAccess flag e se il set di concessioni dei membri non pubblici è limitato al set di concessioni del chiamante o a un subset. Vedere Considerazioni sulla sicurezza per reflection.
Per usare questa funzionalità, l'applicazione deve avere come destinazione .NET Framework 3.5 o versione successiva.
Vedi anche
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Si applica a
InvokeMember(String, BindingFlags, Binder, Object, Object[])
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Richiama il membro specificato, utilizzando i vincoli di associazione specificati e associando l'elenco di argomenti specificato.
public:
System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public:
virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
[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 object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<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)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object
Parametri
- name
- String
Stringa 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 IDispatch i membri, una stringa che rappresenta il DispID, ad esempio "[DispID=3]".
- invokeAttr
- BindingFlags
Combinazione bit per bit dei valori di enumerazione che specificano come viene eseguita la ricerca. L'accesso può essere uno di BindingFlags , ad esempio Public, NonPublic, InvokeMethodPrivate, , GetFielde così via. Non è necessario specificare il tipo di ricerca. Se il tipo di ricerca viene omesso, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static vengono utilizzati.
- binder
- Binder
Oggetto che definisce un set di proprietà e abilita l'associazione, che può comportare la selezione di un metodo di overload, la coercizione dei tipi di argomento e la chiamata di un membro tramite reflection.
oppure
Riferimento Null (Nothing in Visual Basic), per usare il DefaultBinder. Si noti che la definizione esplicita di un Binder oggetto può essere necessaria per richiamare correttamente gli overload del metodo con argomenti variabili.
- target
- Object
Oggetto sul quale richiamare il membro specificato.
- args
- Object[]
Matrice contenente gli argomenti da passare al membro da richiamare.
Valori restituiti
Oggetto che rappresenta il valore restituito del membro richiamato.
Implementazioni
- Attributi
Eccezioni
invokeAttr non contiene CreateInstance e name è null.
invokeAttr non è un attributo valido BindingFlags .
oppure
invokeAttrnon contiene uno dei flag di associazione seguenti: InvokeMethod, CreateInstance, GetFieldSetField, GetProperty, o SetProperty.
oppure
invokeAttrcontiene in CreateInstance combinazione con InvokeMethod, GetFieldSetField, GetProperty, o SetProperty.
oppure
invokeAttr contiene sia GetField che SetField.
oppure
invokeAttr contiene sia GetProperty che SetProperty.
oppure
invokeAttr contiene in InvokeMethod combinazione con SetField o SetProperty.
oppure
invokeAttr contiene SetField e args ha più di un elemento.
oppure
Questo metodo viene chiamato su un oggetto COM e uno dei flag di associazione seguenti non è stato passato in: BindingFlags.InvokeMethod, BindingFlags.GetPropertyBindingFlags.SetProperty, BindingFlags.PutDispProperty, o BindingFlags.PutRefDispProperty.
oppure
Una delle matrici di parametri denominate contiene una stringa che è null.
Il membro specificato è un inizializzatore di classe.
Impossibile trovare il campo o la proprietà.
Non è possibile trovare alcun metodo che corrisponda agli argomenti in args.
oppure
L'oggetto corrente Type rappresenta un tipo che contiene parametri di tipo aperti, ovvero restituisce ContainsGenericParameterstrue.
Il membro specificato non può essere richiamato su target.
Più metodi corrispondono ai criteri di associazione.
Il framework .NET Compact non supporta attualmente questo metodo.
Il metodo rappresentato da name ha uno o più parametri di tipo generico non specificati. Ovvero, la proprietà del ContainsGenericParameters metodo restituisce true.
Esempio
Nell'esempio seguente viene InvokeMember usato per accedere ai membri di un tipo .
using System;
using System.Reflection;
// This sample class has a field, constructor, method, and property.
class MyType
{
Int32 myField;
public MyType(ref Int32 x) {x *= 5;}
public override String ToString() {return myField.ToString();}
public Int32 MyProp
{
get {return myField;}
set
{
if (value < 1)
throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
myField = value;
}
}
}
class MyApp
{
static void Main()
{
Type t = typeof(MyType);
// Create an instance of a type.
Object[] args = new Object[] {8};
Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
Object obj = t.InvokeMember(null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
Console.WriteLine("Type: " + obj.GetType().ToString());
Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);
// Read and write to a field.
t.InvokeMember("myField",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
Int32 v = (Int32) t.InvokeMember("myField",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
Console.WriteLine("myField: " + v);
// Call a method.
String s = (String) t.InvokeMember("ToString",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
Console.WriteLine("ToString: " + s);
// Read and write a property. First, attempt to assign an
// invalid value; then assign a valid value; finally, get
// the value.
try
{
// Assign the value zero to MyProp. The Property Set
// throws an exception, because zero is an invalid value.
// InvokeMember catches the exception, and throws
// TargetInvocationException. To discover the real cause
// you must catch TargetInvocationException and examine
// the inner exception.
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
}
catch (TargetInvocationException e)
{
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if (e.InnerException.GetType() !=
typeof(ArgumentOutOfRangeException))
throw;
Console.WriteLine("An invalid value was assigned to MyProp.");
}
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
v = (Int32) t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
Console.WriteLine("MyProp: " + v);
}
}
open System
open System.Reflection
// This sample class has a field, constructor, method, and property.
type MyType() =
let mutable myField = 0
member _.MyType(x: int byref) =
x <- x * 5
override _.ToString() =
string myField
member _.MyProp
with get () = myField
and set value =
if value < 1 then
raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
myField <- value
let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."
// Read and write to a field.
t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"
// Call a method.
let s = t.InvokeMember("ToString",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"ToString: {s}"
// Read and write a property. First, attempt to assign an
// invalid value then assign a valid value finally, get
// the value.
try
// Assign the value zero to MyProp. The Property Set
// throws an exception, because zero is an invalid value.
// InvokeMember catches the exception, and throws
// TargetInvocationException. To discover the real cause
// you must catch TargetInvocationException and examine
// the inner exception.
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
// If the property assignment failed for some unexpected
// reason, rethrow the TargetInvocationException.
if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
reraise ()
printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
BindingFlags.DeclaredOnly |||
BindingFlags.Public ||| BindingFlags.NonPublic |||
BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
Imports System.Reflection
' This sample class has a field, constructor, method, and property.
Class MyType
Private myField As Int32
Public Sub New(ByRef x As Int32)
x *= 5
End Sub
Public Overrides Function ToString() As [String]
Return myField.ToString()
End Function 'ToString
Public Property MyProp() As Int32
Get
Return myField
End Get
Set(ByVal Value As Int32)
If Value < 1 Then
Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
End If
myField = Value
End Set
End Property
End Class
Class MyApp
Shared Sub Main()
Dim t As Type = GetType(MyType)
' Create an instance of a type.
Dim args() As [Object] = {8}
Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
Console.WriteLine("Type: {0}", obj.GetType().ToString())
Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))
' Read and write to a field.
t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
Console.WriteLine("myField: {0}", v)
' Call a method.
Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
Console.WriteLine("ToString: {0}", s)
' Read and write a property. First, attempt to assign an
' invalid value; then assign a valid value; finally, get
' the value.
Try
' Assign the value zero to MyProp. The Property Set
' throws an exception, because zero is an invalid value.
' InvokeMember catches the exception, and throws
' TargetInvocationException. To discover the real cause
' you must catch TargetInvocationException and examine
' the inner exception.
t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
Catch e As TargetInvocationException
' If the property assignment failed for some unexpected
' reason, rethrow the TargetInvocationException.
If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
Throw
End If
Console.WriteLine("An invalid value was assigned to MyProp.")
End Try
t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
Console.WriteLine("MyProp: {0}", v)
End Sub
End Class
Commenti
Annotazioni
Non è possibile usare InvokeMember per richiamare un metodo generico.
Per definire i membri da includere nella ricerca, è possibile usare i flag di filtro seguenti BindingFlags :
Specificare
BindingFlags.Publicper includere i membri pubblici nella ricerca.Specificare
BindingFlags.NonPublicdi includere membri non pubblici (ovvero membri privati e protetti) nella ricerca.Specificare
BindingFlags.FlattenHierarchyper includere membri statici nella gerarchia.
Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :
BindingFlags.IgnoreCaseper ignorare il caso diname.BindingFlags.DeclaredOnlyper cercare solo i membri dichiarati in Type, non i membri semplicemente ereditati.
I flag di chiamata seguenti BindingFlags possono essere usati per indicare l'azione da eseguire con il membro:
CreateInstanceper richiamare un costruttore.nameviene ignorato. Non valido con altri flag di chiamata.InvokeMethodper richiamare un metodo, ma non un costruttore o un inizializzatore di tipo. Non valido conSetFieldoSetProperty. SeInvokeMethodè specificato da se stesso,BindingFlags.Public,BindingFlags.InstanceeBindingFlags.Staticvengono inclusi automaticamente.GetFieldper ottenere il valore di un campo. Non valido conSetField.SetFieldper impostare il valore di un campo. Non valido conGetField.GetPropertyper ottenere una proprietà. Non valido conSetProperty.SetPropertyper impostare una proprietà. Non valido conGetProperty.
Per altre informazioni, vedere System.Reflection.BindingFlags.
Un metodo verrà richiamato se entrambe le condizioni seguenti sono vere:
Il numero di parametri nella dichiarazione del metodo è uguale al numero di argomenti nella
argsmatrice (a meno che non siano definiti argomenti predefiniti nel membro eBindingFlags.OptionalParamBindingsia specificato).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 richiesto (BindingFlags valori InvokeMethod, GetPropertye 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, viene 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 della Binder classe è responsabile della selezione del metodo da richiamare. Il gestore di associazione predefinito seleziona la corrispondenza più specifica.
Le restrizioni di accesso vengono ignorate per il codice completamente attendibile; ovvero costruttori privati, metodi, campi e proprietà possono essere accessibili e richiamati ogni System.Reflection volta che il codice è completamente attendibile.
È possibile usare Type.InvokeMember per impostare un campo su un determinato valore specificando BindingFlags.SetField. Ad esempio, se si vuole impostare un campo di istanza pubblica denominato F nella classe C e F è un String, è possibile usare codice come:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});
Se F è un String[], è possibile usare codice come:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});
che inizializzerà il campo F in questa nuova matrice. È anche possibile usare Type.InvokeMember per impostare una posizione in una matrice specificando l'indice del valore e quindi il valore successivo usando codice come il seguente:
typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});
Verrà modificata la stringa "z" nella matrice che F contiene nella stringa "b".
Quando si richiama un IDispatch membro, è possibile specificare DispID anziché il nome del membro, usando il formato stringa "[DispID=##]". Ad esempio, se Il valore DispID di MyComMethod è 3, è possibile specificare la stringa "[DispID=3]" anziché "MyComMethod". Richiamare un membro da DispID è più veloce rispetto alla ricerca del membro in base al nome. In scenari di aggregazione complessi, DispID è talvolta l'unico modo per richiamare il membro desiderato.
Annotazioni
Questo metodo può essere usato per accedere a membri non pubblici se il chiamante è stato concesso ReflectionPermission con il ReflectionPermissionFlag.RestrictedMemberAccess flag e se il set di concessioni dei membri non pubblici è limitato al set di concessioni del chiamante o a un subset. Vedere Considerazioni sulla sicurezza per reflection.
Per usare questa funzionalità, l'applicazione deve avere come destinazione .NET Framework 3.5 o versione successiva.
Vedi anche
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission