2 pagine in totale: <<Indietro 1 [2]
Per invocare a run-time un metodo tramite Reflection occorre necessariamente creare un'istanza del tipo a cui è associato il metodo stesso. Per fare questo si ricorre dapprima alla classe System.Activator ed, in particolare, al metodo statico CreateInstance(Type) . Quindi viene chiamato il metodo Invoke(Object, Object[]) dell'istanza di classe MethodInfo ottenuta tramite le istruzioni citate in precedenza.
[VB.NET]
Dim asm As Assembly = Assembly.LoadFrom("myAssembly.dll")
Dim thisType As Type = asm.GetType("myClass")
Dim thisMethod As MethodInfo = thisType.GetMethod("myMethod")
Dim objInstance As Object = Activator.CreateInstance(thisType)
Dim paramsArray As Object()
paramsArray = New Object(1)
paramsArray(0) = "myParam"
thisMethod.Invoke(objInstance, paramsArray)[C#]
Assembly asm = Assembly.LoadFrom("myAssembly.dll");
Type thisType = asm.GetType("myClass");
MethodInfo thisMethod = thisType.GetMethod("myMethod");
Object objInstance = Activator.CreateInstance(thisType);
Object[] paramsArray = new Object[1];
paramsArray[0] = "myParam";
thisMethod.Invoke(objInstance, paramsArray);Se il metodo ritorna un valore, l'ultima riga di codice solitamente diventa:
[VB.NET]
Dim returnValue As Object = thisMethod.Invoke(objInstance, BindingFlags.DefaultBinding, Nothing, paramsArray, Nothing)[C#]
Object returnValue = thisMethod.Invoke(objInstance, BindingFlags.DefaultBinding, null, paramsArray, null);Conclusioni
La Reflection non è un argomento molto semplice, ma per uno sviluppatore "tipo" è molto importante conoscerne le caratteristiche e sapere in quali circostanze può essere utile: per esempio, nel caso di una chiamata ad un metodo internal o protected .
Oltre a questo, ogni sviluppatore accorto dovrebbe sempre disporre di un buon reflector tra i propri strumenti di lavoro: tramite un reflector è infatti possibile investigare all'interno di assembly ed eseguibili e ottenere in questo modo una rappresentazione completa di tutti i tipi contenuti e delle relative dipendenze.
Approfondimenti
- Namespace System.Reflection
- Classe System.Reflection.Assembly
- Classe System.Type
- Classe System.Reflection.MethodInfo
- Classe System.Activator
2 pagine in totale: <<Indietro 1 [2]
Contenuti dell'articolo
- Pagina 2
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità

Stampa
Download 



