Tempo fa avevo già parlato della sintassi abbreviata per la definizione delle proprietà in C# con Visual Studio 2008. Oggi ho provato ad utilizzare Reflector per vedere il codice che di fatto viene generato a tempo di compilazione quando si utilizza questa feature. Partendo dalla seguente classe:
public class TestClass
{
public int MyProperty { get; set; }
}
Quello che si ottiene è:
public class TestClass
{
// Fields
[CompilerGenerated]
private int <MyProperty>k__BackingField;
// Properties
public int MyProperty
{
[CompilerGenerated]
get
{
return this.<MyProperty>k__BackingField;
}
[CompilerGenerated]
set
{
this.<MyProperty>k__BackingField = value;
}
}
}
Dunque niente più di quello che ci aspetta: il compilatore genera un campo privato per gestire il valore della proprietà. Notiamo che il nome della variabile comincia con il carattere <: quando si scrive il codice "direttamente" nell'editor, non è possibile utilizzare questo carattere per i nomi delle variabili. Viene inoltre aggiunto l'attributo CompilerGenerated, grazie al quale è possibile "capire" che gli elementi su cui è applicato sono stati generati automaticamente dal compilatore.