在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;
答案 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; }