J'ai vu récemment plusieur commentaire sur Internet proposant des utilisation pour les
const et le
static readonly. J'ai eu l'impression qu'il y avait un manque de compréhension à ce niveau.
La différence entre les 2 est pourtant fort simple.
Lorsque possible, il faut utiliser le
const autant que possible, car il sera optimisé par le compilateur.
public const String MaConstante = "ValeurDeMaConstante";
Pour sa part, les
static readonly doit être utilisé dans le cas où la
constante nécessite l'appel d'un constructeur par exemple, car le compilateur ne peut pas faire ces appels.
public static readonly Foo MaConstante = new Foo(){ Propriete1 = -1, Propriete2 = "Valeur" };
Il est donc possible d'utiliser les variables
static readonly pour définir des objets avec des valeurs par défaut et connues, comme String.Empty et Guid.Empty, en utilisant le contructeur de la classe, et ainsi s'épargner quelques mots de tête.