单例模式中的私有构造函数和静态构造函数

时间:2018-04-23 04:00:21

标签: constructor singleton

我是一名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)? 有人帮助我,谢谢。

1 个答案:

答案 0 :(得分:1)

所以为了回答你的问题,我们需要去基础。

  

静态构造函数具有以下属性:

     
      
  1. 在创建第一个实例或任何静态成员之前,会自动调用静态构造函数来初始化类   引用。
  2.   
  3. 无法直接调用静态构造函数。
  4.   
  5. 如果静态构造函数抛出异常,则运行时将不会再次调用它,并且该类型将保持未初始化状态   程序所在的应用程序域的生命周期   运行
  6.   

但是对于标准单例模式

  
      
  1. 当我们打电话时,它会被加载。因此,我们可以控制何时创建单例对象。
  2.   
  3. 用户完全可以控制何时进行呼叫。
  4.   

希望它能回答你的问题。