Лямбда для геттера и сеттер собственности
В С# 6.0 я могу написать:
public int Prop => 777;
Но я хочу использовать getter и setter.
Есть ли способ сделать что-то вроде следующего?
public int Prop {
get => propVar;
set => propVar = value;
}
Ответы
Ответ 1
Прежде всего, это не лямбда, хотя синтаксис похож.
Это называется " члены с выраженным телом ". Они похожи на лямбды, но все же принципиально отличаются. Очевидно, они не могут захватывать локальные переменные, как это делают лямбды. Кроме того, в отличие от лямбд, они доступны через их имя :) Вы, вероятно, поймете это лучше, если попытаетесь передать свойство с выражением в виде делегата.
В С# 6.0 такого синтаксиса для сеттеров нет, но С# 7.0 вводит его.
private int _x;
public X
{
get => _x;
set => _x = value;
}
Ответ 2
С# 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
}
}
Ответ 3
Нет такого синтаксиса, но старый синтаксис довольно похож:
private int propVar;
public int Prop
{
get { return propVar; }
set { propVar = value; }
}
или
public int Prop { get; set; }