c# - C# 10 中的结构无参数构造函数和字段初始值设定项
问题描述
C# 10 可以为结构声明无参数构造函数和字段初始值设定项。根据语言参考,当您声明字段初始值设定项但没有显式无参数构造函数时,会发生以下情况:
如果不显式声明无参数构造函数,则结构类型提供无参数构造函数,其行为如下:
如果结构类型具有显式实例构造函数或没有字段初始值设定项,则隐式无参数构造函数会生成结构类型的默认值,而不考虑字段初始值设定项 (...)。
如果结构类型没有显式实例构造函数并且具有字段初始化器,则编译器会合成一个公共无参数构造函数来执行指定的字段初始化 (...)。
以下代码输出1
:
struct S {
public int X = 1;
}
class Program {
static void Main() { System.Console.WriteLine(new S().X); }
}
以下代码输出0
:
struct S {
public int X = 1;
public S(int x) { X = x; }
}
class Program {
static void Main() { System.Console.WriteLine(new S().X); }
}
这完全符合上面引用的规范,但我觉得这不合逻辑,所以我的问题是:为什么?为什么隐式无参数构造函数会根据是否有其他实例构造函数有不同的行为?为什么即使有其他实例构造函数,它也不能总是考虑字段初始值设定项?
解决方案
推荐阅读
- highcharts - yaxis标签在highcharts中重复出现
- java - org.hibernate 包可以从多个模块访问:hibernate.commons.annotations、hibernate.core
- wordpress - Estore wordpress 主题未完全加载
- java - 将电子邮件发送到以下服务器失败:smtp.mailtrap.io:465
- java - java long 除法两个值意外结果
- android - 如何将来自不同路径的图像附加到电子邮件?
- node.js - 在没有浏览器的情况下使用 Node.js 应用程序观看以太坊智能合约事件
- php - Yii2:如何在使用 Codeception 进行测试时将日志写入文件?
- visual-studio - 如何使用 msbuild 引导生成的文件任务输出
- vba - 使用 vba Excel 过滤