我是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()呢?另一个问题是为什么同一规则不适用于类?没有默认构造函数的情况下可以拥有自动属性吗?
最终,结构必须在确定的赋值上有严格的规则,然后才能将它们作为一个完整的值(需要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)