在C#6.0中使用新的Expression-Bodied Members功能,我们可以采用这样的方法:
public void Open()
{
Console.WriteLine("Opened");
}
...并将其更改为具有同等功能的简单表达式:
public void Open() => Console.WriteLine("Opened");
然而,构造函数并非如此。像这样的代码没有编译:
private DbManager() => Console.WriteLine("ctor");
这也不是:
private DbManager() => {}
有没有理由为什么构造函数不能从表达体成员特性中受益,并且必须以传统方式声明?
答案 0 :(得分:14)
这会让人感到困惑而不是有用。特别是当您向另一个构造函数添加调用时。
以下是设计说明的直接引用:
构造函数在头文件中以这个(...)或base(...)初始化器的形式具有语法元素,这些元素在胖箭头之前看起来很奇怪。更重要的是,构造函数几乎总是副作用语句,并且不返回值。
来自C# Design Notes for Nov 4, 2013
以更一般的方式:
总而言之,表达式主体允许在方法和用户定义的运算符(包括转换)上,它们表示从函数返回的值,以及属性和索引器,它们表示从getter返回的值,并暗示缺少一个二传手。
答案 1 :(得分:4)
既然已经发布了c#7.0,就可以使用表达式 - 体型构造函数。
private DbManager() => Console.WriteLine("ctor");
在c#7.0中运行良好