by Fabien Lavocat
23. March 2008 02:01
En C#2.0, comment faisions-nous pour créer des attributs avec leurs propriétés associées ?
private String _myProperty;
public String MyProperty
{
get { return this._myProperty; }
set { this._myProperty = value; }
}
Et voilà ce que le logiciel Reflector traduit à partir du code IL généré à la compilation :
private string _myProperty;
public string MyProperty
{
get
{
return this._myProperty;
}
set
{
this._myProperty = value;
}
}
Vous remarquez que ce sont exactement les même lignes.
Nous allons maintenant utiliser la simplification d’écriture de C#3.5 :
public String MyProperty
{
get;
set;
}
Il n’est désormais plus nécessaire de créer l’attribut privé ainsi que le contenu des méthodes get et set de la propriété.
Voilà ce que Reflector nous génére à partir du code IL :
public string MyProperty
{
[CompilerGenerated]
get
{
return this.<myproperty>k__backingfield;
}
[CompilerGenerated]
set
{
this.<myproperty>k__BackingField = value;
}
}
L’attribut [CompilerGenerated] qui est rajouté par le compilateur indique que c’est lui-même (le compilateur) qui as créé le contenu de la méthode. <myproperty>k__backingfield permet à la CLR de récupérer ou modifier la valeur auquel fait référence la propriété étant donné que tout à été généré par le compilateur.
Si vous ne connaissez pas Reflector, je vous conseille de jeter un coup d’oeil sur ce logiciel : http://www.aisto.com/roeder/dotnet/