[英]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.