C# 11中声明struct实例时,其构造函数内代码是否会执行?
C# 11中struct无参构造函数执行逻辑解析
先看你提供的代码:
struct bb { public int j = 8; public int f; public bb() { f = 88; } } //main method bb test;
你的猜测部分正确,但存在关键误解,具体说明如下:
单纯声明局部变量
bb test;不会调用任何构造函数
这段代码只是声明了一个局部值类型变量,此时变量处于未赋值状态,编译器会阻止你直接访问它的字段,必须先完成初始化操作才能使用。不同初始化方式的构造函数执行逻辑
- 显式调用构造函数(
bb test = new bb();):此时会完整执行你定义的无参构造函数,既会执行字段初始化语句j=8,也会运行构造函数内的f=88;,最终test的j值为8,f值为88。 - 默认初始化(
bb test = default;或类字段自动初始化):此时不会触发你写的显式无参构造函数,只会将所有字段设为对应类型的默认值(int类型默认值为0),所以test的j值为0,f值为0,构造函数内的f=88;和字段初始化j=8都不会执行。
- 显式调用构造函数(
总结:你猜测的“构造函数内诸如f=88;的其他代码不会运行”仅在默认初始化场景下成立;但“声明test时会调用无参构造函数”是错误的,单纯的局部变量声明不会触发构造函数调用。
内容的提问来源于stack exchange,提问作者Eric Movsessian
相关产品推荐
相关产品推荐

