Citation Envoyé par Beowulf59 Voir le message
...pouvez vous me dire la différence entre const et static readonly? Car une constante est forcément static et readonly non? Il doit y avoir une subtilité qui m'échappe.
Pour faire simple, et avec peut-être quelques abus de langages de ma part, en fait, sous .NET, "constant" désigne une valeur écrite "en dur" dans l'assemblage, alors que "static readonly" est une variable comme les autres mais dont le compilateur va vérifier qu'on ne la modifie pas ailleurs que dans le constructeur statique.

"readonly" est utilisé pour empêcher toute modification d'une variable en dehors du constructeur d'une instance si non statique, ou du constructeur statique si statique.
"constant" ne peut être utilisé uniquement que pour des types primitifs (int, string, long,...)

Petit exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
class MaClass
{
  static readonly List<int> _maList;
 
  //Constructeur statique
  static MaClass()
  {
    maList=new List<int>();
  }
 
  //Une méthode
  void UneMethode()
  {
    //Le compilateur va râler si je fais ceci ici :
    //maList = new List<int>();
 
    //Par contre j'ai le droit de faire ceci :
    maList.Add(5);
    maList[0] = 6;
 
    //Pour empêcher l'ajout dans une liste, il faut utiliser des ReadOnlyCollection au lieu de List.
  }
}