【发布时间】:2014-03-31 12:46:15
【问题描述】:
鉴于下面的 C# 代码,我希望私有数据成员 _userDataStorage 会立即初始化。相反,我发现它根本没有被初始化。我在初始化语句上放了一个断点,它永远不会被击中。这意味着 DB 静态属性始终返回 NULL。静态类与非静态类的工作方式不同吗?
public static class UserDataStorageWrapper
{
private static UserDataStorage _userDataStorage = new UserDataStorage();
public static UserDataStorage DB
{
get
{
return _userDataStorage;
}
}
}
我现在将更改代码以检查 NULL 并自己初始化 _userDataStorage。但我想在这里确定我的期望。
【问题讨论】:
-
您的属性实际上是在返回
null,还是您的断点根本没有被命中? -
使用静态构造函数初始化值有什么不同吗?
-
你真的使用这个类吗?除非正在使用,否则它可能不会被初始化。
-
它肯定返回null并且断点没有被命中,这就是它返回null的原因,因为初始化程序没有被执行。查看 MAV 的答案,除非访问对象,否则不会触发静态初始化程序。因为它是私人的,所以永远不会发生。恕我直言,有点奇怪的政策。
标签: c# static initialization static-classes