关于C#结构体内部定义静态只读实例是否会引发无限循环的疑问
结构体中定义静态只读实例是否会引发无限循环?
不会引发无限循环,原因如下:
- 结构体属于值类型,其静态字段的初始化逻辑和引用类型有本质区别。对于代码里的
static readonly position Zero;,如果没有显式赋值,C#会自动执行默认值初始化:把该实例的所有字段设置为对应类型的默认值(这里x和y都会被初始化为0.0)。 - 这个默认初始化是底层的内存清零操作,不会递归调用结构体的构造函数,也不会触发静态字段的重复初始化,自然不会产生无限循环。
- 如果换成类(引用类型)这么写,可能会因为递归初始化出现问题,但值类型的静态字段初始化是在类型首次被访问时完成,且默认初始化过程完全独立于实例构造逻辑。
附上你提到的代码片段:
public struct position { public static readonly position Zero; public double x; public double y; ... }
内容的提问来源于stack exchange,提问作者GRS
相关产品推荐
相关产品推荐

