Caratteristiche di C#

Dalla versione 3.0 di C# sono state introdotte alcune caratteristiche che rendono la scrittura delle classi e dei metodi comuni molto più semplice e concisa.
In questo post vedremo le automatic properties e gli object initializers.

AUTOMATIC PROPERTIES

Le automatic properties (o auto-implemented properties) altro non sono che una sintassi compatta per scrivere le proprietà di una classe. Esse consentono di scrivere codice del tipo:

1
2
3
public String name {get; set;}

public DateTime birthday {get; set;}

che verrà automaticamente tradotto dal compilatore (da qui il nome di automatic properties) in qualcosa del tipo

1
2
3
4
5
6
7
8
9
10
11
12
private String _name;
private DateTime _birthday;

public String name {
  get { return _name; }
  set { _name = value; }
}

public String birthday {
  get { return _birthday; }
  set { _birthday = value; }
}

Naturalmente nulla vieta di scrivere il codice nella seconda forma, quella più estesa, visto che per il compilatore sono equivalenti.
Ma è indubbio che la prima è molto più comoda.

OBJECT INITIALIZERS

Con il termine object initializer si intende una scrittura compatta per impostare le proprietà pubbliche di una classe.
Citando MSDN “Gli inizializzatori di oggetto consentono di assegnare valori a qualsiasi proprietà o campo accessibile di un oggetto in fase di creazione senza dover richiamare un costruttore in modo esplicito.”

Consideriamo la seguente classe Person

1
2
3
4
public class Person {
    public String firstName { get; set; }
    public String lastName { get; set; }
}

Prima dell’avvento di C# 3.0 per popolare questa classe avremmo dovuto scrivere:

1
2
3
Person p= new Person();
p.firstName = "Claudio";
p.lastName = "Marai";

Ora invece grazie agli object initializers possiamo scrivere la stessa cosa in questo modo

1
2
3
4
5
Person p= new Person()
{
    firstName = "Claudio",
    lastName = "Marai"
}

impostando quindi i valori delle proprietà mentre si istanzia la classe.

Se nella classe Person è definito un sotto-oggetto come proprietà è possibile utilizzare gli object initializers per creare anche il sotto-oggetto.
Supponiamo che Person definisca anche una property address di tipo Address, dove Address è cosi definita:

1
2
3
4
public class Address {
    public String street { get; set; }
    public String city { get; set; }
}

Potremmo allora istanziare Person come segue:

1
2
3
4
5
6
7
8
9
10
Person p= new Person()
{
    firstName = "Claudio",
    lastName = "Marai",
    adress =  = new Address()
    {
        street = "via roma 12",
        city = "Verona"
    }
}

Con questo post ho cercato di darvi un idea dell’utilità di queste funzionalità e di quando il codice diventi più leggibile se scritto facendone uso.

Automatic Properties e Object Initializers sono due delle caratteristiche di C# che ho maggiormente apprezzato quando, venendo dal mondo Java, ho iniziato ad utilizzare questo linguaggio.
Forse ad un primo sguardo non sembrano una gran cosa, ma quando si comincia ad utilizzarle difficilmente si tornerebbe indietro.
La mia speranza è che vengano presto introdotte anche in Java.