欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于靜態(tài)Singleton模式的使用介紹

 更新時間:2013年04月18日 11:53:22   作者:  
本篇文章小編為大家介紹,基于靜態(tài)Singleton模式的使用介紹。需要的朋友參考下

什么是靜態(tài)單例模式?

靜態(tài)單例模式(Static Singleton Pattern)是我在實踐中總結的模式,主要解決的問題是在預先知道某依賴項為單例應用時,通過靜態(tài)緩存該依賴項來提供訪問。當然,解決該問題的辦法有很多,這只是其中一個。

實現(xiàn)細節(jié)

復制代碼 代碼如下:

/// <summary>
  /// 靜態(tài)單例
  /// </summary>
  /// <typeparam name="TClass">單例類型</typeparam>
  public static class Singleton<TClass> where TClass : class, new()
  {
    private static readonly object _lock = new object();
    private static TClass _instance = default(TClass);

    /// <summary>
    /// 獲取單例實例
    /// </summary>
    public static TClass GetInstance()
    {
      return Instance;
    }

    /// <summary>
    /// 單例實例
    /// </summary>
    public static TClass Instance
    {
      get
      {
        if (_instance == null)
        {
          lock (_lock)
          {
            if (_instance == null)
            {
              _instance = new TClass(); // must be public constructor
            }
          }
        }

        return _instance;
      }
    }

    /// <summary>
    /// 設置單例實例
    /// </summary>
    /// <param name="instance">單例實例</param>
    public static void Set(TClass instance)
    {
      lock (_lock)
      {
        _instance = instance;
      }
    }

    /// <summary>
    /// 重置單例實例
    /// </summary>
    public static void Reset()
    {
      lock (_lock)
      {
        _instance = default(TClass);
      }
    }
  }


應用測試
復制代碼 代碼如下:

class Program
  {
    interface IInterfaceA
    {
      string GetData();
    }
    class ClassA : IInterfaceA
    {
      public string GetData()
      {
        return string.Format("This is from ClassA with hash [{0}].", this.GetHashCode());
      }
    }
    static void Main(string[] args)
    {
      string data1 = Singleton<ClassA>.GetInstance().GetData();
      Console.WriteLine(data1);
      string data2 = Singleton<ClassA>.GetInstance().GetData();
      Console.WriteLine(data2);

      Console.ReadKey();
    }
  }


測試結果

相關文章

  • 詳解WPF雙滑塊控件的使用和強制捕獲鼠標事件焦點

    詳解WPF雙滑塊控件的使用和強制捕獲鼠標事件焦點

    這篇文章主要為大家詳細介紹了WPF中雙滑塊控件的使用和強制捕獲鼠標事件焦點的實現(xiàn),文中的示例代碼講解詳細,感興趣的可以嘗試一下
    2022-07-07
  • 舊項目升級新版Unity2021導致Visual?Studio無法使用的問題

    舊項目升級新版Unity2021導致Visual?Studio無法使用的問題

    在項目開發(fā)過程中,不可避免的會升級開發(fā)工具。這次我在舊項目版本升級到新版Unity2021.2.x時,出現(xiàn)Visual?Studio無法定位等問題,這里我給大家分享下解決方法,舊項目升級新版Unity2021導致Visual?Studio無法使用的問題,需要的朋友可以參考下
    2021-12-12
  • C# VB 實現(xiàn)10進制 16進制之間互相轉換

    C# VB 實現(xiàn)10進制 16進制之間互相轉換

    如何將10進制轉成16進制,又如何將16進制數(shù)轉成10進制,本文將介紹C#和VB實現(xiàn)代碼,需要了解的朋友可以參考下
    2012-11-11
  • C#?重寫Notification提示窗口的示例代碼

    C#?重寫Notification提示窗口的示例代碼

    本文主要介紹了C#?重寫Notification提示窗口的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • C#實例化和靜態(tài)類對象調用對比

    C#實例化和靜態(tài)類對象調用對比

    這篇文章主要介紹了C#實例化和靜態(tài)類對象調用對比,什么時候用實例化對象,什么時候用靜態(tài)類對象,內(nèi)存和生命周期又是如何,框架本身的回收機制是什么,下文詳細解說需要的小伙伴可以參考一下
    2022-04-04
  • c#進程之間對象傳遞方法

    c#進程之間對象傳遞方法

    本文主要介紹了c#進程之間對象傳遞的方法。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • C#游戲開發(fā)之實現(xiàn)華容道游戲

    C#游戲開發(fā)之實現(xiàn)華容道游戲

    這篇文章主要為大家詳細介紹了C#如何實現(xiàn)經(jīng)典華容道游戲,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • C#實現(xiàn)的海盜分金算法實例

    C#實現(xiàn)的海盜分金算法實例

    這篇文章主要介紹了C#實現(xiàn)的海盜分金算法,結合具體實例形式分析了海盜分金算法的原理與C#相應實現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • C#中String與string的區(qū)別分析

    C#中String與string的區(qū)別分析

    這篇文章主要介紹了C#中String與string的區(qū)別,對于加深C#數(shù)據(jù)類型與類的理解有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • WPF實現(xiàn)帶模糊搜索的DataGrid的示例代碼

    WPF實現(xiàn)帶模糊搜索的DataGrid的示例代碼

    這篇文章主要為大家詳細介紹了WPF如何實現(xiàn)帶模糊搜索的DataGrid,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2023-02-02

最新評論