首页 > 解决方案 > 为什么我们不能设置在结构中创建的属性的值而不在 C# 中创建结构的构造函数?

问题描述

我在结构中创建了一个字段和一个 int 类型的自动实现属性。

为什么不创建结构体值的构造函数可以赋值给字段但不能设置属性值?

在此处输入图像描述

编辑:图像更新

标签: c#oop

解决方案


语言参考

通常,您通过使用 new 运算符调用适当的构造函数来实例化结构类型。每种结构类型至少有一个构造函数。这是一个隐式的无参数构造函数,它产生类型的默认值。您还可以使用默认值表达式来生成类型的默认值。

如果结构类型的所有实例字段都可以访问,您也可以在不使用 new 运算符的情况下对其进行实例化。在这种情况下,您必须在第一次使用实例之前初始化所有实例字段。

所以你可以通过调用它的构造函数来初始化一个结构,或者你可以声明一个未初始化的结构,然后在第一次使用之前手动初始化它的每个字段。

这里的技巧是您确实需要直接分配每个字段- 您不能调用初始化字段的方法(或属性设置器,这是一种特殊类型的方法)。这意味着如果您的结构具有自动属性,则不能使用此技术,因为无法直接初始化自动属性的支持字段。

(这是因为编译器需要检查您是否已明确分配给每个字段。如果您调用分配这些字段的方法/属性设置器,编译器无法检查该方法正在做什么,特别是如果结构是在单独的程序集中声明意味着它可以更改)。


推荐阅读