32 votes

Quelle est cette étrange syntaxe C# et comment la construire ?

En lisant un projet, j'ai trouvé un code C# étrange :

public class F : IElement
{
    public int CurrentHp { get; } = 10;
    public bool IsDead => CurrentHp <= 0;
}

Normalement, j'aurais écrit quelque chose comme :

public class F : IElement
{
    public const int CurrentHp = 10;
    public bool IsDead
    {
        get { return CurrentHp <= 0; }
    }
}

Mon Visual Studio 2013 ne peut pas non plus reconnaître le premier exemple.

Quelle est cette syntaxe et que dois-je faire pour rendre ce projet constructible ?

34voto

Steve Points 3757

=> est un nouvel opérateur dans le C# 6 et indique un Expression Fonction corporelle à utiliser pour ce getter.

Vos deux exemples sont synonymes du point de vue du compilateur et retournent simplement la valeur assignée. Le site => es sucre syntaxique pour rendre le développement un peu plus facile et nécessiter moins de lignes de code pour obtenir le même résultat.

Cependant, vous ne pourrez pas compiler si vous ne mettez pas à jour VS2015 avec la dernière version du compilateur.

Editar:

Comme l'ont dit Philip Kendall et Carl Leth dans les commentaires, les premières lignes de chacun ne sont pas exactement synonyme de public const int CurrentHp = 10; est un champ et public int CurrentHp { get; } = 10; est une propriété. Bien qu'à un niveau élevé, le résultat soit le même (attribuer une valeur de 10 à CurrentHp avec la propriété qui ne peut être définie que dans le constructeur de la classe), ils diffèrent en cela :

Avec const int CurrentHp = 10 , CurrentHp sera toujours 10 occupent 4 octets au total et sont accessibles de manière statique. int CurrentHp { get; } = 10 La valeur par défaut est 10 mais il peut être modifié dans le constructeur de l'objet F et donc peuvent être différents par instance et ne peuvent pas être accédés statiquement.

23voto

g4s8 Points 1103

Ce sont les fonctionnalités de C# 6 : Nouvelles fonctionnalités du langage en C# 6 .

Le premier

public int CurrentHp { get; } = 10;

es L'auto-perfectionnement du Getter-only .

Le deuxième

public bool IsDead => CurrentHp <= 0;

es Corps d'expression sur les membres de fonctions de type propriété .

7voto

aiodintsov Points 1150

Comme d'autres l'ont dit, il s'agit des nouvelles fonctionnalités de C# 6. Consultez la liste complète sur 1

Cependant, plus correctement, cela se traduirait par ceci avant C# 6 :

public class F : IElement
{
    public int CurrentHp { get; private set };
    public bool IsDead { get { return CurrentHp <= 0; } }
    public F() { CurrentHp = 10; }
}

Nouvelles fonctionnalités du langage en C# 6

1voto

Fuzzi59 Points 441

Voici votre code si vous utilisez C# 6 :

public bool IsDead => CurrentHp <= 0;

Il s'agit simplement d'une propriété avec un get si vous utilisez cet opérateur => .

Dans les versions antérieures, vous deviez écrire quelque chose comme ceci :

public bool IsDead { get { return CurrentHp <= 0; } }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X