Pourquoi?
Je ne peux pas parler au nom des concepteurs de C#, mais je peux faire la spéculation éduquée:
- Ils voulaient voir à quel point un gros problème, il est avant de prendre le temps de ajouter un autre fonctionnalité et encore une autre règle à la langue.
- Ils ne pouvaient pas trouver un moyen suffisamment élégant pour faire cela.
Cela dit, voici comment je permettrais des valeurs (quand un accesseur est disponible, bien sûr):
public string MyProp {get;set;} = "initial value"; // not valid C#
Sans faire la langue plus complexe, ils pourraient écrire la règle de telle sorte que il applique à « [tout] propriétés avec l'ensemble accesseurs » au lieu de « propriétés par défaut avec l'ensemble accesseurs »:
// again, not valid C#:
public string MyProp
{
get { return _MyProp;}
set { _MyProp = value; }
} = "initial value before being massaged or rejected by the set accessor.";
Le seul inconvénient que je vois ici est qu'il est laid. Les avantages sont que vous pouvez spécifier de manière concise une valeur initiale pour une propriété avec cette propriété plutôt que dans le constructeur, et que vous pouvez laisser la valeur être massée/vérifiée/tout via le constructeur à l'exécution si vous le souhaitez.
Malheureux qui n'est pas possible de faire actuellement - mais il ne serait pas dommageable pour ajouter la capacité dans les futures versions C# - J'espère qu'ils ne correspondent en avenir. (Et ajouter la possibilité de créer des propriétés auto readonly) –
Il serait particulièrement agréable de pouvoir marquer des propriétés avec des champs de sauvegarde automatique pour rendre le champ de sauvegarde 'readonly'. À ce stade, nous pourrions initialiser à travers la propriété mais seulement dans le constructeur. Cela a été discuté sur SO avant. –
Enfin, une fonctionnalité où VB permet une syntaxe plus concise! Dans VB10, 'Propriété publique MyString As String =" valeur initiale "' fonctionne. – Heinzi