溫馨提示×

C# singleton怎樣保證唯一實(shí)例

c#
小樊
86
2024-07-30 15:33:12
欄目: 編程語言

在C#中,可以通過以下方式來保證單例模式的唯一實(shí)例:

  1. 私有構(gòu)造函數(shù):確保外部無法直接實(shí)例化該類。

  2. 靜態(tài)變量:在類中定義一個(gè)靜態(tài)變量用于存儲唯一實(shí)例。

  3. 靜態(tài)方法:通過一個(gè)靜態(tài)方法來獲取該類的唯一實(shí)例,如果不存在則創(chuàng)建一個(gè)新實(shí)例。

  4. 線程安全:使用線程安全的方式來保證在多線程環(huán)境下也只有一個(gè)實(shí)例被創(chuàng)建。

下面是一個(gè)簡單的示例代碼:

public class Singleton
{
    private static Singleton instance;
    private static readonly object lockObject = new object();

    private Singleton()
    {
    }

    public static Singleton GetInstance()
    {
        if (instance == null)
        {
            lock (lockObject)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

在上面的代碼中,通過私有構(gòu)造函數(shù)和靜態(tài)方法 GetInstance() 來實(shí)現(xiàn)單例模式,并通過雙重鎖定(double-checked locking)來確保線程安全。當(dāng)?shù)谝粋€(gè)線程訪問 GetInstance() 方法時(shí),會判斷 instance 是否為空,如果為空則加鎖并再次檢查,確保只有一個(gè)實(shí)例被創(chuàng)建。

0