之前写C#的时候遇到了一个bug,我看微软文档好像没怎么解释,所以发出来帮大伙避个坑
大家都知道,类中的静态字段在声明时可以后跟一个初始化语句,非常的好用,非常的省心
有些静态字段在初始化的时候使用了一些参数,我们可能会希望把这些参数公开出来,例如有一个随机数生成器,它的种子也是一个随机数,我们把种子和随机数生成器一起用只读静态字段公开出来,让外面可以访问到随机数生成器和它使用的种子
但是,静态字段在相互引用时有一个极其严重的问题,那就是按声明的顺序进行初始化
如果我有两个静态字段AB,B引用了A,同时B在A后面声明,那么B可以正确访问A初始化后的值
如果B在A之前声明,那么类的成员在被引用后,程序不会报错,B拿到的A值变成了A的默认值,即A字段类型的default表达式值
如果只是这种情况,那么在你有一个良好的编程范式的前提下,基本上都不会出现相关的问题
但是喜欢用源生成器的小伙伴们要注意了,根据主播的实测,带有partial修饰的分部类在静态初始化时不同文件内的静态初始化执行顺序是不可知的,如果是一个文件内还有顺序,多个文件相互引用肯定凉凉了,别问,都是血的教训