在类中使用静态字段

sgt*_*gtz 4 .net c# .net-4.0

所以我在一个类中有一个字段,但由于某种原因它返回的是未初始化的值0001.01.01.

 private static DateTime start = new DateTime(2011, 1, 1);
Run Code Online (Sandbox Code Playgroud)

另一个静态方法用作另一个字段中的初始化程序.

 private static readonly DateTime[] dates = SetupDates(20 * 12);


 private static DateTime[] SetupDates(int n){
    var d = start;
    ....
 }
Run Code Online (Sandbox Code Playgroud)

认为启动中的"新"需要在SetupDates继续之前完成...因此局部变量d将包含2011.1.1.看起来我错了,我应该使用静态构造函数.这种行为是期待的吗?

Ray*_*Ray 6

这个命令很重要.

类的静态字段变量初始值设定项对应于以它们出现在类声明中的文本顺序执行的赋值序列.

确保start首先声明静态字段.或者更好地使用静态构造函数,因此您不依赖于字段的顺序.

例如,这有效:

    private static DateTime start = new DateTime(2011, 1, 1);
    private static readonly DateTime[] dates = SetupDates(20 * 12);
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

    //Bad SetupDates relies on start which is not initialized
    private static readonly DateTime[] dates = SetupDates(20 * 12); 
    private static DateTime start = new DateTime(2011, 1, 1);
Run Code Online (Sandbox Code Playgroud)

假设你改变SetupDates回来了DateTime[]