gpt4 book ai didi

c# - 没有默认构造函数和自动属性,为什么它仍然可以编译

转载 作者:行者123 更新时间:2023-12-03 04:40:26 25 4
gpt4 key购买 nike

我是 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() 调用默认构造函数的情况下对我来说编译得很好?另一个问题是为什么同样的规则不适用于类(class)?你可以有一个没有默认构造函数的自动属性吗?

最佳答案

最终,结构在可以作为整个值进行访问之前,对明确的赋值有严格的规则(对于 this 访问是必需的);在 C# 6 之前,编译器不会将构造函数中的自动属性视为明确赋值的一部分,因此调用属性 setter 的访问被视为无效。从 C# 6 开始,确实如此(将自动属性视为结构构造函数中明确赋值的一部分),因此所示的代码现在有效。

因为它是有效的(对于任何最新的编译器,即使您设置的语言级别早于 C# 6),它也会编译。

但请注意,这适用于构造函数内部。以下内容仍然无效(尽管它适用于裸字段):

SomeStruct x;
x.StringProperty = "abc"; // CS0165 Use of unassigned local variable x
x.IntProperty = 123;
SomeMethod(x);

关于c# - 没有默认构造函数和自动属性,为什么它仍然可以编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56423055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com