为什么我们不能使用表达式构造函数?

时间:2015-01-27 10:42:00

标签: c# c#-6.0 vs-2015-preview

在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() => {}

有没有理由为什么构造函数不能从表达体成员特性中受益,并且必须以传统方式声明?

2 个答案:

答案 0 :(得分:14)

这会让人感到困惑而不是有用。特别是当您向另一个构造函数添加调用时。

以下是设计说明的直接引用:

  

构造函数在头文件中以这个(...)或base(...)初始化器的形式具有语法元素,这些元素在胖箭头之前看起来很奇怪。更重要的是,构造函数几乎总是副作用语句,并且不返回值。

来自C# Design Notes for Nov 4, 2013

以更一般的方式:

  

总而言之,表达式主体允许在方法和用户定义的运算符(包括转换)上,它们表示从函数返回的值,以及属性和索引器,它们表示从getter返回的值,并暗示缺少一个二传手。

答案 1 :(得分:4)

既然已经发布了c#7.0,就可以使用表达式 - 体型构造函数。

private DbManager() => Console.WriteLine("ctor");

在c#7.0中运行良好