【发布时间】:2015-05-19 03:48:32
【问题描述】:
有没有办法强制部分类中的静态字段初始化顺序?假设在 HelloWorld1.cs 我有:
partial class HelloWorld
{
static readonly string[] a = new[] { "Hello World" };
}
我在 HelloWorld2.cs 的其他地方有:
partial class HelloWorld
{
static readonly string b = a[0];
}
如果 a 在 b 之前初始化,这很好,但如果 b 在 a 之前初始化,那么它会抛出 an。健康的方法可能是使用静态构造函数,但我很好奇当字段类位于同一个部分类的不同文件中时,是否有办法强制或预测初始化顺序。
【问题讨论】:
-
您的用例是什么?在您给出的示例中, b 将在使用时从 a[] 返回预期值。所以,我不清楚你为什么关心......
-
您在问题中拥有正确的答案。您应该使用静态构造函数。
-
@SilasReinagel,情况并非总是如此。如果 b 在 a 之前初始化,则该类将在静态初始化时抛出错误。在同一个文件中,排序是文本的,但是在同一个部分类的不同文件之间呢?
-
@AltonXL 代码将变得异常脆弱、可读性差、更难维护,即使有 已定义的顺序。你最好假设没有明确定义的顺序,不管是否存在。