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

slo*_*ams 2 .net c# oop

我是C#的新手,只是有关默认构造函数和自动属性的问题。基于一个关于stackoverflow的问题: 如何在struct构造函数中设置auto属性支持字段的值?

所以我们有以下结构

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; }
}
Run Code Online (Sandbox Code Playgroud)

但是如何在不调用默认构造函数by的情况下对我进行编译:this()呢?另一个问题是为什么同一规则不适用于类?没有默认构造函数的情况下可以拥有自动属性吗?

Mar*_*ell 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);
Run Code Online (Sandbox Code Playgroud)