Ok, sto per iniziare con una banalita', soprattutto qui dove vi sono persone in questi dintorni che si cibano di codice C# quotidianamente.

La combinazione di automatic properties e object initializer permette di risparmiare parecchie righe di codice. Ad esempio:

class Program {
  static void Main(string[] args)  {
    Console.WriteLine(new Item { Label = "Patate" });
  }
}

public class Item {
  public string Label { get; set; }

  public override string ToString()  {
    return Label;
  }
}

Leggendo alcuni post ci si chiedeva se non era il caso di introdurre una nuova keyword property in modo da scrivere

public property string Label;

invece di

public string Label { get; set; }

Personalmente preferisco la soluzione scelta dai progettisti C#. Risulta, almeno ai miei occhi, piu' chiara e leggibile. Se infatti un domani dovessi introdurre una constraint di sola lettura della proprieta' pubblica non dovrei far altro che aggiungere un modificatore di proprieta' (accessor):

public class Item { 
  public Item(string label) {
     this.Label = label;
  }

  public string Label { get; protected set; }

  public override string ToString()  {
    return Label;
  }
}

Ovviamente, con questa modifica l'object initializer si va a far benedire. Mica si puo' voler tutto dalla vita, no? :-)