我是C#的新手,只是一个关于默认构造函数和自动属性的问题。基于关于stackoverflow的问题: How can I set the value of auto property backing fields in a struct constructor?
所以我们有以下结构
public struct SomeStruct
{
public SomeStruct(String stringProperty, Int32 intProperty)
{
this.StringProperty = stringProperty;
this.IntProperty = intProperty;
}
public String StringProperty { get; set; }
public Int32 IntProperty { get; set; }
}
但是如何编译它而不用:this()
调用默认构造函数呢?
另一个问题是为什么同一规则不适用于类?您可以拥有没有默认构造函数的自动属性吗?
答案 0 :(得分:5)
最终,结构必须在确定的赋值上有严格的规则,然后才能将它们作为一个完整的值进行触摸(this
访问权限是必需的);在C#6之前的版本中,编译器并未将构造函数中的自动属性视为确定分配的一部分,因此,对调用属性设置器的访问被视为无效。从C#6开始,它就这样做了(将自动属性视为结构构造函数中确定分配的一部分),因此所示的代码现在有效。
因为它是有效的(对于任何最新的编译器,即使将语言级别设置为早于C#6),它也会进行编译。
但是请注意,此仅仅适用于构造函数。以下内容仍然无效(尽管它适用于裸字段):
SomeStruct x;
x.StringProperty = "abc"; // CS0165 Use of unassigned local variable x
x.IntProperty = 123;
SomeMethod(x);