Существуют ли различия при использовании синтаксиса свойства "get {}", "set {}" или "=>" в C#?

Code_1 (этот код использует "=>", почему оба кода имеют одинаковый результат)

public class Infor<TFirst, TSecond, TThird>
{
    private TFirst first;
    private TSecond second;
    private TThird third;

    public TThird Third { get => third; set => third = value; }
    public TSecond Second { get => second; set => second = value; }
    public TFirst First { get => first; set => first = value; }
}

Code_2 (этот код использует "return", а не "=>")

public class Infor<TFirst, TSecond, TThird>
{
    private TFirst first;
    private TSecond second;
    private TThird third;

    public TThird Third { get { return third; } set { third = value; } }
    public TSecond Second { get { return second; } set { second = value; } }
    public TFrist First { get { return first; } set { first = value; } }
}

3 ответа

Решение

Нет, различий нет. Внутренне C# компилятор преобразует MyProperty { get { или же set { Синтаксис методов, генерируемых компилятором, со следующими сигнатурами и реализациями:

TFirst get_MyProperty() { return first;}
void set_MyProperty(TFirst value) { first = value; }

То же самое происходит для => Синтаксис, который называется expression bodied property accessors, Использование => это просто syntactic sugar который был создан для упрощения кодирования и сокращения стандартного кода, который должен быть написан повторно.

Нет никакой разницы между этими двумя примерами кода. Это также работает с функциями, если у вас есть только одна внутренняя операция с результатом, который может быть немедленно возвращен из функции. Например:

int Method(int x)
{
    return x;
}

Эквивалентно:

int Method(int x) => x;

Есть различия в компиляторах, которые могут справиться с этим.

Средства доступа к свойствам Expression - это функция C# 7. Так, например, компилятор C# 6 сочтет это ошибкой.

Другие вопросы по тегам