c#6.0-c#结构中的无参数构造函数

本文关键字:参数 构造函数 0-c# 结构 c#6 | 更新日期: 2023-09-27 17:59:43

我的理解是,结构中的无参数构造函数现在是允许的。

但下面给了我一个VS 2015 Community 中的编译错误

public struct Person 
{ 
    public string Name { get; } 
    public int Age { get; } 
    public Person(string name, int age) { Name = name; Age = age; } 
    public Person() : this("Jane Doe", 37) { } 
}

错误:"结构不能包含显式无参数构造函数"

有人知道为什么吗?

c#6.0-c#结构中的无参数构造函数

该功能出现在C#6.0的旧预览版中,这就是为什么有些文章会谈论它。但后来它被删除了,因此它不存在于VS 2015 RC发行的版本中。

具体而言,在拉取请求#1106中恢复了更改,在问题#1029中提供了更多关于基本原理的信息。引用弗拉基米尔·萨多夫:

随着我们进行越来越多的测试,我们不断发现无参数结构构造函数在库中甚至在某些版本的CLR中导致不一致行为的情况。

[…]

在重新考虑了打破长期假设所产生的潜在问题后,我们决定最好让用户恢复对结构构造函数的要求,使其始终具有形式参数。

该功能随后被添加回C#10.0中。