没有默认的构造函数和自动属性,如何编译

时间:2019-06-03 07:45:14

标签: c# .net oop

我是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()调用默认构造函数呢? 另一个问题是为什么同一规则不适用于类?您可以拥有没有默认构造函数的自动属性吗?

1 个答案:

答案 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);