Automatic Properties di C# 3.0: servono davvero?

C# 3.0 permette una notazione compatta per le proprietà che si limitano semplicemente a wrappare un corrispondente field:

   1:  public string Descrizione { get; set; }

Sulle prime mi è sembrata un'innovazione piuttosto utile, se non altro per le entity di dominio, che notoriamente non hanno logica e che risultano essere parecchio più veloci da scrivere e leggibili. Così utili che ho anche realizzato un accessor per farle supportare da NHibernate (lo trovate qui).

Poi ho iniziato a sperimentare un po' e... beh... mi convincono fino ad un certo punto. Perchè? Beh, ovviamente devono avere sia il getter che il setter, quindi niente proprietà readonly per le collection, tanto per dirne una, a meno di non definire il set come privato. Ma farlo vuol dire inizializzare la proprietà nel costruttore. Quindi ciò che prima era così

   1:  private IList<Dettaglio> dettagli = new List<Dettaglio>();
   2:  public IList<Dettaglio> Dettagli
   3:  {
   4:      get { return dettagli; }
   5:  }

ora diviene così

   1:  public IList<Dettaglio> Dettagli { get; private set; }
   2:  public MyClass()
   3:  {
   4:      this.Dettagli = new List<Dettaglio>();
   5:  }

Non un gran guadagno, isn't it? E perché non usare solo per queste proprietà la sintassi classica? Risposta semplice: solitamente (è noto) uso NHibernate e non mi piace l'idea di dover utilizzare due strategy diverse per accedere ai field sottostanti.

Mettiamola così: magari più in là cambierò idea, ma ora come ora preferisco la strategia dell'ottimo Reshareper, che mi permette di fare qualcosa del tipo (tratto dalla trial della versione 3.0)...

image image

image

 

Technorati tags:

Comments

# re: Automatic Properties di C# 3.0: servono davvero?
Gravatar Curiosità: perché hai definito un accessor per accedere alla property tramite field anziché specificare direttamente nel mapping l'accessor di tipo filed con relativa strategia dei nomi (in modo da specificare nel nome del mapping quello della property e non del field)?
C'è qualche motivazione prestazionale dietro? Se si, di quanto si migliorano le performace?
Left by Cristiano Simionato on 09/08/2007 9.19
# re: Automatic Properties di C# 3.0: servono davvero?
Gravatar Ciao Cristiano, ehm... scusa ma a quest'ora dormo ancora e credo di non aver capito bene la tua domanda :D

Comunque il mio accessor puoi utilizzarlo specificandolo nell'attributo default-access del nodo <hibernate-mapping>, continuando quindi di fatto a specificare i nomi delle proprietà nel mapping. In ogni caso non è in gioco alcuna motivazione prestazionale, dato che gli accessor sono utilizzati solo in fase di creazione della SessionFactory e, quindi, una volta per ciclo di vita dell'applicazione.
Left by Marco De Sanctis on 09/08/2007 10.43

Leave Your Comment

Title*
Name*
Email (never displayed)
 (will show your gravatar)
Url
Comment*

Please add 5 and 7 and type the answer here:

Preview Your Comment.