簡體   English   中英

C#單身定義

[英]C# singleton definition

我看到了這樣的實現:

class MyClass
{
    private static readonly MyClass _instance = new MyClass();

    public static MyClass Instance{
        get{ return _instance; }
    }
}

為什么不簡單?

class MyClass
{
    public static readonly MyClass Instance = new MyClass();
}

可以公開這樣的公共字段 - 但我不願意。 如果將其保留為屬性,則可以稍后更改實現。 例如,假設您稍后添加了一個靜態方法,您想要在不初始化單例的情況下調用它 - 使用屬性版本,您可以將代碼更改為:

public sealed class MyClass
{
    public static MyClass Instance { get { return InstanceHolder.instance; } }

    private MyClass() {}

    private static class InstanceHolder
    {
        internal static readonly MyClass instance = new MyClass();
    }

    public static void Foo()
    {
        // Calling this won't initialize the singleton
    }
}

(對於原始版本,單例可能已初始化,或者可能不是 - 它取決於CLR。)

這只是您可能希望稍后更改實現的一個示例。 有了房產,你可以這樣做 - 有了田地,你做不到。

你在那里得到的工作會很好,但是公共領域通常不贊成屬性。 您可以更改get { ... }的實現,而無需更改調用代碼。 這將使您(例如)切換到延遲初始化,其中僅在第一次使用實例時創建實例。

請注意,雖然調用代碼不需要更改,但它會更改類的簽名,因為readonly屬性與readonly字段不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM