Лямбда для геттера и сеттер собственности

В С# 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; }