我是一名c#开发人员。
我对单例模式中的私有构造函数和静态构造函数感到困惑。
以下是我的示例代码:
标准单例模式,它是线程安全的:
public class SingletonTest
{
private static readonly Lazy<RedisCacheManager> CacheManager = new Lazy<RedisCacheManager>(() => new RedisCacheManager());
/// <summary>
/// singleton pattern
/// </summary>
private SingletonTest() { }
public static RedisCacheManager Instance
{
get { return CacheManager.Value; }
}
}
第二,它将私有构造函数更改为静态构造函数:
public class SingletonTest
{
private static readonly Lazy<RedisCacheManager> CacheManager = new Lazy<RedisCacheManager>(() => new RedisCacheManager());
/// <summary>
/// static(single object in our application)
/// </summary>
static SingletonTest() { }
public static RedisCacheManager Instance
{
get { return CacheManager.Value; }
}
}
我的问题是第二个代码仍然是单例模式之一,还是只在我们的应用程序中始终只保留一个对象(RedisCacheManager)? 有人帮助我,谢谢。
答案 0 :(得分:1)
所以为了回答你的问题,我们需要去基础。
静态构造函数具有以下属性:
- 在创建第一个实例或任何静态成员之前,会自动调用静态构造函数来初始化类 引用。
- 无法直接调用静态构造函数。
- 如果静态构造函数抛出异常,则运行时将不会再次调用它,并且该类型将保持未初始化状态 程序所在的应用程序域的生命周期 运行
醇>
但是对于标准单例模式
- 当我们打电话时,它会被加载。因此,我们可以控制何时创建单例对象。
- 用户完全可以控制何时进行呼叫。
醇>
希望它能回答你的问题。