Lambda for getter和setter of property

时间:2016-04-02 11:08:03

标签: c# c#-6.0

在C#6.0中我可以写:

from __future__ import print_function
from time import sleep

print('this will print lately')

sleep(2)

print('and this one')

但我想使用getter和setter。 有办法做下一件事吗?

public int Prop => 777;

3 个答案:

答案 0 :(得分:71)

首先,这不是lambda,虽然语法相似。

它被称为" expression-bodied members"。它们与lambdas类似,但仍然根本不同。显然,他们无法捕捉像lambdas那样的局部变量。此外,与lambdas不同,它们可以通过其名称访问:)如果您尝试将表达式身体属性作为委托传递,您可能会更好地理解这一点。

C#6.0中没有setter的语法,但是C# 7.0 introduces it

private int _x;
public X
{
    get => _x;
    set => _x = value;
}

答案 1 :(得分:28)

C# 7为其他成员提供了对二传手的支持:

  

更多表达身体的成员

     

表达方法,属性等在C#6.0中受到重创,   但我们不允许他们在各种成员中。 C#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
    }
}

答案 2 :(得分:0)

没有这样的语法,但旧语法非常相似:

    private int propVar;
    public int Prop 
    {
        get { return propVar; }
        set { propVar = value; }
    }

或者

public int Prop { get; set; }