В С# 6.0 я могу написать:
public int Prop => 777;
Но я хочу использовать getter и setter. Есть ли способ сделать что-то вроде следующего?
public int Prop {
get => propVar;
set => propVar = value;
}
В С# 6.0 я могу написать:
public int Prop => 777;
Но я хочу использовать getter и setter. Есть ли способ сделать что-то вроде следующего?
public int Prop {
get => propVar;
set => propVar = value;
}
Прежде всего, это не лямбда, хотя синтаксис похож.
Это называется " члены с выраженным телом ". Они похожи на лямбды, но все же принципиально отличаются. Очевидно, они не могут захватывать локальные переменные, как это делают лямбды. Кроме того, в отличие от лямбд, они доступны через их имя :) Вы, вероятно, поймете это лучше, если попытаетесь передать свойство с выражением в виде делегата.
В С# 6.0 такого синтаксиса для сеттеров нет, но С# 7.0 вводит его.
private int _x;
public X
{
get => _x;
set => _x = value;
}
С# 7 приносит поддержку сеттеров, среди других членов:
Больше выраженных членов тела
Методы выражения, свойства и т.д. Пользуются большим успехом в С# 6.0, но мы не допускали их для всех типов членов. С# 7.0 добавляет методы доступа, конструкторы и финализаторы к списку вещей, которые могут иметь тела выражений:
class Person { private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>(); private int id = GetId(); public Person(string name) => names.TryAdd(id, name); // constructors ~Person() => names.TryRemove(id, out _); // finalizers public string Name { get => names[id]; // getters set => names[id] = value; // setters } }
Нет такого синтаксиса, но старый синтаксис довольно похож:
private int propVar;
public int Prop
{
get { return propVar; }
set { propVar = value; }
}
или
public int Prop { get; set; }