Condividi tramite


Type.InvokeMember Metodo

Definizione

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.Public per includere i membri pubblici nella ricerca.

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

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

Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :

  • BindingFlags.IgnoreCase per ignorare il caso di name.

  • BindingFlags.DeclaredOnly per 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:

  • 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 SetProperty. Se InvokeMethod è specificato da se stesso, BindingFlags.Public, BindingFlags.Instancee BindingFlags.Static vengono inclusi automaticamente.

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

  • SetField per impostare il 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 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 args matrice (a meno che non siano definiti argomenti predefiniti nel membro e BindingFlags.OptionalParamBinding sia 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

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.Public per includere i membri pubblici nella ricerca.

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

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

Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :

  • BindingFlags.IgnoreCase per ignorare il caso di name.

  • BindingFlags.DeclaredOnly per 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:

  • 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 SetProperty. Se InvokeMethod è specificato da se stesso, BindingFlags.Public, BindingFlags.Instancee BindingFlags.Static vengono inclusi automaticamente.

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

  • SetField per impostare il 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 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 args matrice (a meno che non siano definiti argomenti predefiniti nel membro e BindingFlags.OptionalParamBinding sia 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

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.Public per includere i membri pubblici nella ricerca.

  • Specificare BindingFlags.NonPublic di includere membri non pubblici (ovvero membri privati e protetti) nella ricerca.

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

Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :

  • BindingFlags.IgnoreCase per ignorare il caso di name.

  • BindingFlags.DeclaredOnly per 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:

  • 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 SetProperty. Se InvokeMethod è specificato da se stesso, BindingFlags.Public, BindingFlags.Instancee BindingFlags.Static vengono inclusi automaticamente.

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

  • SetField per impostare il 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 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 args matrice (a meno che non siano definiti argomenti predefiniti nel membro e BindingFlags.OptionalParamBinding sia 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

Si applica a