Подтвердить что ты не робот

Какой этот странный синтаксис С# и как его построить?

При чтении проекта я нашел странный код С#:

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

Обычно я писал бы что-то вроде:

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

My Visual Studio 2013 также не может распознать первый пример.

Что это за синтаксис и что мне делать, чтобы сделать этот проект возможным?

4b9b3361

Ответ 1

=> является новым оператором в С# 6 и указывает выражение, выраженную темой для использования для этого получателя.

Два ваших примера являются синонимами в отношении компилятора и просто возвращают присвоенное значение. => представляет собой синтаксический сахар, чтобы сделать разработку немного проще и потребовать меньше строк кода для достижения того же результата.

Однако вы не сможете скомпилировать, если вы не обновите VS2015 с последней версией компилятора.

Edit:

Как сказано в комментариях Филиппом Кендалом и Карлом Литом, первые строки в каждой из них не совсем синонимичны, поскольку public const int CurrentHp = 10; - это поле, а public int CurrentHp { get; } = 10; - свойство. Хотя на высоком уровне результат одинаков (присваивание значения от 10 до CurrentHp, причем свойство только устанавливается в конструкторе класса), они отличаются тем, что:

С const int CurrentHp = 10, CurrentHp всегда будет 10, возьмет 4 байта и может получить доступ к статически. int CurrentHp { get; } = 10 по умолчанию используется 10, но может быть изменен в конструкторе F и, следовательно, может быть различным для каждого экземпляра и не может быть достигнут статически.

Ответ 3

Как говорили другие люди, новые функции С# 6. Проверьте полный список на 1

Однако более правильно это переведет это до С# 6:

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

Новые возможности языка в С# 6

Ответ 4

Это ваш код, если вы используете С# 6:

public bool IsDead => CurrentHp <= 0;

Это просто свойство с get, если использовать этот оператор =>.

В более ранних версиях вы могли бы написать что-то вроде этого:

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