Reflection indica la possibilità di ottenere le informazioni relative ai tipi contenuti in un assembly a run-time. Infatti tramite il namespace System.Reflection il .NET Framework fornisce una serie di API per analizzare assemblies e oggetti, consentendo addirittura di invocare direttamente i metodi di una classe, o di accedere alle sue proprietà.
La Reflection si rivela pertanto un meccanismo assai potente e utile in molte circostanze, per esempio, per creare assemblies dinamicamente in memoria o, appunto, invocare un metodo di un tipo contenuto in un assembly.
Per utilizzare la Reflection la prima cosa da fare è includere il relativo namespace, che è System.Reflection :
[VB.NET]
Imports System.Reflection[C#]
using System.Reflection;Una volta importato il namespace, occorre caricare l'assembly da "analizzare". Nel nostro caso la DLL si chiamerà in modo molto fantasioso: myAssembly.dll . Per fare ciò si utilizza il metodo statico Assembly.LoadFrom(String) , che carica in memoria l'assembly il cui percorso viene passato come parametro alla funzione. Il metodo restituisce un'istanza della stessa classe Assembly.
[VB.NET]
Dim asm As Assembly = Assembly.LoadFrom("myAssembly.dll")[C#]
Assembly asm = Assembly.LoadFrom("myAssembly.dll");Per ottenere informazioni su myAssembly.dll ed, in particolar modo, sui tipi in esso contenuti si può utilizzare uno fra i due metodi Assembly.GetTypes() e Assembly.GetType(String) : il primo permette di ottenere un array di tipi, il secondo restituisce i dettagli del tipo il cui nome è specificato nel parametro.
[VB.NET]
Dim typeArray As Type() = asm.GetTypes()
Dim thisType As Type = asm.GetType("myClass")[C#]
Type typesArray[] = asm.GetTypes();
Type thisType = asm.GetType("myClass");In realtà esistono diverse firme per il metodo GetType (overloading), ma lascio alla buona volontà di ciascuno eventuali approfondimenti in merito. Tramite Assembly.GetType(String) è possibile conoscere non poche informazioni su un tipo: Name , Namespace , IsClass , IsInterface , IsAbstract , IsCOMObject , IsSealed , IsPublic , ecc. Per la classe Type esistono alcuni metodi per ottenere i membri associati ad un tipo (campi, metodi e proprietà) come istanze di classi particolari contenute nel namespace System.Reflection :
- GetMembers() : ritorna una array di oggetti System.Reflection.MemberInfo ;
- GetFields() : ritorna una array di oggetti System.Reflection.FieldInfo ;
- GetProperties() : ritorna una array di oggetti System.Reflection.PropertyInfo ;
- GetMethods() : ritorna un array di oggetti System.Reflection.MethodInfo .
[VB.NET]
Dim methodsArray As MethodInfo = thisType.GetMethods()
Dim thisMethod As MethodInfo = thisType.GetMethod("myMethod")[C#]
MethodInfo[] methodsArray = thisType.GetMethods();
MethodInfo thisMethod = thisType.GetMethod("myMethod");Ciascuna delle classi sopra citate ( MemberInfo , FieldInfo , PropertyInfo e MethodInfo ) espone metodi e proprietà specifiche. In particolare, la classe System.Reflection.MethodInfo è caratterizzata tra gli altri dai seguenti membri:
- Name ;
- IsPrivate ;
- IsPublic ;
- IsStatic ;
- IsVirtual ;
- IsConstructor ;
- ReturnType ;
- GetParameters() ;
- Invoke(Object, Object[]) .
Contenuti dell'articolo
- Pagina 2
- I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Utilità

Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!