静态私有数据成员未在静态类中初始化?

时间:2014-02-27 20:22:55

标签: c# static initialization static-classes

鉴于下面的C#代码,我希望立即初始化私有数据成员 _userDataStorage 。相反,我发现根本没有被初始化。我在初始化语句上放了一个断点,它永远不会被命中。这意味着DB静态属性始终返回NULL。静态类的工作方式与非静态类的工作方式不同吗?

public static class UserDataStorageWrapper
{
    private static UserDataStorage _userDataStorage = new UserDataStorage();

    public static UserDataStorage DB
    { 
        get
        {
            return _userDataStorage;
        }
    }
}

我将更改代码以检查NULL并立即初始化_userDataStorage。但是我想在这里确定我的期望。

2 个答案:

答案 0 :(得分:6)

由于它是静态初始化程序,因此它将在首次使用该类的静态字段之前的实现相关时间初始化“”。 Source

因此,除非使用该字段(或该类中的其他静态字段),否则您的断点可能不会被命中。


为了完整性,我可以补充一点,如果有静态构造函数,静态字段初始值设定项将在静态构造函数之前执行。

答案 1 :(得分:0)

尝试添加静态构造函数并初始化变量。

public static class UserDataStorageWrapper
{
    public static UserDataStorageWrapper()
    {
        _userDataStorage = new UserDataStorage();
    }

    private static UserDataStorage _userDataStorage;

    public static UserDataStorage DB
    { 
        get
        {
            return _userDataStorage;
        }
    }
}

如果类中存在静态构造函数,则在执行静态构造函数 ”之前,会立即执行静态字段初始化程序。 {3}}