testa
 
 
 
Internet Iinterfaces (Interfacce)
cornice di chiusura
 
Utilizzo degli attributi in C#
Code Project - articolo originale
 
Gli attributi in C# non sono altro che informazioni che vengono scambiate tra gli sviluppatori.
Queste informazioni possono essere attaccate a class, method, namespace, assembly, property, delegate, enum, event, interface e struct per aggiungere informazioni metadati al proprio assembly.
Gli attributi sono definiti utilizzando le "parentesi quadre" [ e ].

 public class Class1
 {
  [Obsolete]
  public void Method1()
  {
  }
 
  public void Method2()
  {
  }
 }



In questo esempio il Method1 è stato adornato con l'attributo Obsolete e quando si utilizzerà il metodo, verrà comunicato allo sviluppatore che questo metodo è obsoleto.
Creare attributi personalizzati.
Gli attributi devono derivare dalla classe Attribute

 class PersonalAttribute : Attribute
 {
  public string AttributeText { get; set; }
 }


 [PersonalAttribute(AttributeText="Attributo personalizzato per classe")]
 public class Class1
 {
  [PersonalAttribute(AttributeText="Attributo personalizzato per metodo")]
  public void Method1()
  {
  }
 
  [PersonalAttribute(AttributeText="Attributo personalizzato per proprietà")]
  public void Property1{ get; set; }
 }



Reflection.
Gli attributi hanno una grande importanza quando si utilizza la reflection perchè permettono di fornire maggiori informazioni agli sviluppatori che analizzano le nostre classi

 [AttributeUsage(AttributeTargets.Property)]
 class Check : Attribute
 {
  public int MaxLength { get; set; }
 }


 public class Class1
 {
  private string _CustomerCode;
  [Check(MaxLength=10)]
  public string CustomerCode
  {
   get { return _CustomerCode; }
   set { _CustomerCode = value; }
  }
 
 }



Quando si utilizza la Reflection per accedere ai dati ed alle informazioni:

 Class1 myClass = new Class1();
 myClass.CustomerCode = "1234567890123456789";
 Type classType = myClass.GetType();

 foreach(PropertyInfo p in classType.GetProperties())
 {
  foreach(Attribute a in p.GetAttributes(false))   {
   Check c = (Check)a;
   if (c.Name.Equals("CustomerCode"))
   {
    if (my.CustomerCode.Length > c.MaxLength)
     throw new Exception("Lunghezza troppo lunga!");
   }
  }
 }



 
 
 
 
 
I23 di Boccaletti Emanuele
 
I23 di Boccaletti Emanuele
41121 Modena (MO)
Tel. +39 347 1302420
emanuele@i23.eu
Skype: emanuele.boccaletti
 
 
Copyright © I23 di Boccaletti Emanuele - emanuele@i23.eu