类与结构体的构造函数是否初始化字段至默认值?实例化疑问咨询
C#类与结构体的字段初始化顺序解析
类aa的初始化逻辑
- 字段
j的=8属于字段初始值设定项,这个赋值操作会在构造函数aa()的代码执行前自动完成,所以创建aa实例时,j会被初始化为8,该过程确实不由构造函数内的代码执行。 - 字段
f的初始化流程:首先,所有引用类型实例的字段在构造函数执行前会被默认初始化为对应类型的默认值(int的默认值是0),随后构造函数中的f=99会覆盖这个值,最终f的结果是99。
结构体bb的初始化逻辑
需要注意,C#中结构体的初始化规则和类存在差异,尤其是显式定义无参构造函数的情况:
- 字段
v的=7是字段初始值设定项,会在显式无参构造函数bb()的代码执行前完成,所以创建bb实例时,v会被初始化为7,该操作不由构造函数内的代码执行。 - 字段
l不会先被默认初始化为0。因为显式定义了无参构造函数,结构体实例初始化时会先执行所有字段的初始值设定项,再执行构造函数中的代码,直接将l赋值为88,不存在先默认初始化的步骤。
内容的提问来源于stack exchange,提问作者Erik_JI
相关产品推荐
相关产品推荐

