这样实现实际上也是延迟加载..如果这个类里只有一个单例的话.
那这样的话,这是最简单的实现方式了,没有多线程的问题,又有延迟初始化的效果。
@磨剑: 要看场景,比如我有一个静态工厂,里面全是各个类的单例.这个东西就不能实现延迟加载
@吴瑞祥: 其实我还是不理解为什么这个能延迟初始化,为什么一个类里面有很多单例时就不行。不知道这是哪方面的知识,我搜索哪些关键词可以找到相关内容?谢谢指点,新手来的,刚开始接触c#。。
@磨剑: 因为静态成员的初始化都会被放发静态构造函数中,当第一次调用静态成员的时候才会调用静态构造函数.对静态成员进行初始化
@吴瑞祥: 嗯,谢谢!我去看了相关的资料,静态成员是在创建第一个类实例或第一次被引用之前,并且在调用静态构造函数(如有存在)之前进行初始化。
谢谢解答。
没必要额外增加一个属性,这样:
class Singleton
{
public static readonly SingletonInstance = new Singleton();
}
谢谢解答!嗯,这样确实更加简单明了,readonly也限制它不能被修改。不过还是习惯用属性或者方法来访问数据。