Какой этот странный синтаксис С# и как его построить?
При чтении проекта я нашел странный код С#:
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 также не может распознать первый пример.
Что это за синтаксис и что мне делать, чтобы сделать этот проект возможным?
Ответы
Ответ 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
и, следовательно, может быть различным для каждого экземпляра и не может быть достигнут статически.
Ответ 2
Возможности С# 6:
Новые возможности языка в С# 6.
Первый
public int CurrentHp { get; } = 10;
Автоматическая настройка Getter-only.
Второй
public bool IsDead => CurrentHp <= 0;
- тела выражения в свойствах, подобных членам функции.
Ответ 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; } }