IReflect.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 specificato.
public:
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);
public 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 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);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object
Parametri
- name
- String
Nome del membro da ricercare.
- invokeAttr
- BindingFlags
Uno degli attributi di chiamata di BindingFlags. Il parametro invokeAttr
può essere un costruttore, un metodo, una proprietà o un campo. È necessario specificare un attributo di chiamata appropriato. Richiamare il membro predefinito di una classe passando una stringa vuota ("") come nome del membro.
- binder
- Binder
Uno dei flag di bit di BindingFlags. Implementa l'oggetto Binder, contenente le proprietà relative a questo metodo.
- target
- Object
Oggetto su cui richiamare il membro specificato. Il parametro viene ignorato nel caso dei membri statici.
- args
- Object[]
Matrice di oggetti che contiene il numero, l'ordine e il tipo dei parametri del membro da richiamare. Si tratta di una matrice vuota se non sono disponibili parametri.
- modifiers
- ParameterModifier[]
Matrice di oggetti ParameterModifier. Questa matrice ha la stessa lunghezza del parametro args
che rappresenta gli attributi degli argomenti del membro richiamato nei metadati. Un parametro può avere i seguenti attributi: pdIn
, pdOut
, pdRetval
, pdOptional
e pdHasDefault
. Questi rappresentano rispettivamente [In], [Out], [retval], [optional] e un parametro predefinito. Questi attributi sono utilizzati da vari servizi di interoperabilità.
- culture
- CultureInfo
Istanza di CultureInfo usata per regolare la coercizione dei tipi. Ad esempio, culture
converte una stringa che rappresenta il numero 1000 in un valore Double, dal momento che 1000 è rappresentato in modo diverso nelle varie impostazioni cultura. Se questo parametro è null
, viene utilizzato l'oggetto CultureInfo per il thread corrente.
- namedParameters
- String[]
Matrice di parametri di tipo stringa.
Restituisce
Membro specificato.
Eccezioni
Sono stati specificati più argomenti per un metodo set
di campo.
Non è possibile trovare il campo o la proprietà.
Impossibile trovare il metodo.
Viene richiamato un membro privato senza l'oggetto ReflectionPermission necessario.
Esempio
Nell'esempio seguente viene ottenuto il valore della Now proprietà .
#using <System.DLL>
using namespace System;
using namespace System::Reflection;
#define NULL 0
void main()
{
Type^ tDate = Type::GetType( L"System.DateTime" );
Object^ result = tDate->InvokeMember( L"Now", BindingFlags::GetProperty, nullptr, NULL, gcnew array<Object^>(0) );
Console::WriteLine( result->ToString() );
}
using System;
using System.Reflection;
public class MainClass
{
public static void Main(string[] args)
{
Type tDate = typeof(System.DateTime);
Object result = tDate.InvokeMember("Now",
BindingFlags.GetProperty, null, null, new Object[0]);
Console.WriteLine(result.ToString());
}
}
Imports System.Reflection
Public Class MainClass
Public Overloads Shared Sub Main(ByVal args() As String)
Dim tDate As Type = GetType(System.DateTime)
Dim result As [Object] = tDate.InvokeMember("Now", _
BindingFlags.GetProperty, Nothing, Nothing, New [Object](-1) {})
Console.WriteLine(result.ToString())
End Sub
End Class
Commenti
Il metodo da richiamare deve essere accessibile e fornire massima corrispondenza con l'elenco di argomenti specificato, in conformità ai vincoli del binder e degli attributi di chiamata specificati.
Viene richiamato un metodo se il numero di parametri nella dichiarazione del metodo è uguale al numero di argomenti nell'elenco di argomenti specificato e il tipo di ogni argomento può essere convertito dal binder nel tipo del parametro.
Nota
La matrice di modificatori di parametri passati al InvokeMember metodo deve contenere un singolo modificatore di parametro. Solo il primo modificatore di parametro viene considerato quando si determina quale argomento deve essere passato per riferimento quando viene esposto a COM.
Il gestore di associazione trova tutti i metodi corrispondenti, in base al tipo di associazione richiesto (BindingFlags.InvokeMethod, GetPropertiese così via). Il set di metodi viene filtrato in base al nome, al numero di argomenti e a un set di modificatori di ricerca definiti nel gestore di associazione. Dopo aver selezionato il metodo, viene richiamato e l'accessibilità viene verificata a quel punto. La ricerca può controllare il set di metodi in cui viene eseguita la ricerca in base all'attributo di accessibilità associato al metodo . BindToMethod seleziona il 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, è possibile accedere a costruttori, metodi, campi e proprietà privati e richiamarlo tramite reflection ogni volta che il codice è completamente attendibile.