Teknik olarak Sürüm çalışması gerekir. Ancak, Singleton sınıfınızdaki bir kamusal alanı teşhir etmeyi önermem ve bir Mülk kullanmayı tercih ederim (yalnızca bir alıcıyla). Daha sonra değişiklik yapmanız gerekiyorsa, bu API'nizi ileride kanıtlamaya yardımcı olur. Tek bir sınıf uygulamasının da alt sınıflara ayrılmasının hemen hemen her zaman kötü bir fikir ve sorun olduğu için, tekil bir uygulamayı kapatmanızı öneririm. Eğer .NET 4 kullanıyorsanız
public sealed class Singleton
{
static readonly Singleton instance = new Singleton();
public static Singleton Instance
{
get
{
return instance;
}
}
static Singleton() { }
private Singleton() { }
}
, kendiniz için bu daha da kolaylaştırabilecek: .NET 3.5 veya daha önceki hedefleme eğer
Ben, şahsen, C# aşağıdaki kullanırsınız Lazy<T>
aracılığıyla: - senin Singleton
sınıf öncesinde "Örnek" özelliğinin erişmek için kullanılan diğer statik yöntemler olsa bile
public sealed class Singleton
{
private static readonly Lazy<Singleton> instance = new Lazy<Singleton>(() => new Singleton());
private Singleton() {}
public static Singleton Instance { get { return instance.Value; } }
}
.NET 4 sürümü de tam tembel olma avantajına sahiptir. Özel, yuvalanmış bir sınıf kullanarak, tam bir .NET 3.5 sürümü de yapabilirsiniz. Jon Skeet demonstrated this on his blog.
Kurucu sonsuz çekmez olmaz mı? –
@Robert, 'statik Sınıf()' ifadesi, yalnızca bir kez çağrılan statik kurucu içindir. 'New Class()' çağrısı, 'private Class()' örnek yapıcısını vurur. –
Not: Statik ctor içinde ctor çağrısı örneği var (sınıf başlatıcısı). – Andreas