Manage data in a .NET Framework application using .NET Framework 2.0 system types (System namespace)
Gli attributi servono ad aggiungere informazioni, “metadati” per essere precisi, alle classi. Si puo’ fare un po’ di tutto e con la tecnica detta System.Reflection si indaga il contenuto.
Ci sono attributi per tutti i gusti e dettagliano le informazioni in modo differente. Esempi:
· Per i parametri della PInvoke
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]
extern static void SampleMethod();
· Per il marshalling:
[DllImport("Shell32", CharSet=CharSet.Auto)]
internal extern static int ExtractIconEx(
[MarshalAs(UnmanagedType.LPTStr)]
string lpszFile, //size of the icon
· Per la serializzazione:
[System.Serializable]
· Per la COM:
[ComVisibleAttribute(false)]
· Per indicare una condizione legata ad una define
[Conditional("TRACE_ON")]
public static void Msg(string msg) {..}
Se c’e’ #define TRACE_ON esiste, altrimenti no...che cosa furba, soprattuto bella nell’accezzione [Conditional("DEBUG")]…
· Per associare a proprietà ed eventi una categoria
[Description("Evento per il cambio di classe"), Category("MIEI EVENTI")]
public event ChangeClass OnChangeClass
· Per indicare che qualcosa è obsoleto
[System.Obsolete("Non usarlo piu, usa quello nuovo che si chiamo ABC")]
public void metodoVecchio()
· Globali
[assembly: AssemblyCompany("MIA")]
· Si possono completamente personalizzare, creandosi una propria classe MieiDati derivata da System.Attribute, dicendogli che si puo’ usare sulle classi e sulle struct ed inserendo le proprietà che ci interessano. A questo punto questo attributo esiste e si puo’ usare a corredo delle ns classi
[MieiDati(parCostruttore, altriparametri)]
public class SampleClass
Tutto l’esempio in : http://msdn2.microsoft.com/en-us/library/sw480ze8(VS.80).aspx
Gli attributi si consultano attraverso la Reflection, è possibile fare un sacco di cose tra cui, controllare le informazioni degli assembly, moduli, creare nuovi tipi a run-time e fare anche late-binding. Interessante...
http://msdn2.microsoft.com/en-us/library/ms173183(VS.80).aspx