考虑 C# 中的以下结构:
public struct TestStruct
{
public int Number { get; set; }
public TestStruct(int num)
{
Number = num;
}
}
我非常熟悉如果尝试编译它时会发生的编译错误(this 和 that 问题提供了一个示例)。
但是,我最近注意到这样的结构在 Visual Studio 2015 中编译得非常完美。
我无法找到包含上述行为的编译器的任何更改日志。任何人都可以提供有关在哪里可以找到此类信息的任何指导吗?我发现提到了类似的东西 here 。
此外,关于编译器错误 CS0188 的页面指出:
但是,我无法观察到无法从构造函数初始化属性。
最佳答案
这是 C#6 中的新功能(这是您在 VS2015 中默认使用的)。该编译器错误的描述也不完全正确。自动属性总是有一个支持字段,它只是由编译器生成,不能直接从代码访问。所以有点误导。
C# 中自动属性初始化的更改现在允许编译器生成代码来设置支持字段,而不是尝试在构造函数中调用 setter 方法。这也使得创建不可变结构变得更加容易:
public struct Foo
{
public string ReadOnlyString { get; }
public Foo( string prop )
{
ReadOnlyString = prop;
}
}
关于c# - 使用结构和属性时没有编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41981954/