2010-04-11 7 views
5

Böyle bir Singleton deseni uygulamaya: Bu C# şeyler yapmak için yaygın bir yoldur gibi C# Singleton uygulamaları için etrafında Googling itibarenBu, C# için geçerli, tembel, diş güvenli bir Singleton uygulaması mı?

public sealed class MyClass { 

    ... 

    public static MyClass Instance { 
     get { return SingletonHolder.instance; } 
    } 

    ... 

    static class SingletonHolder { 
     public static MyClass instance = new MyClass(); 
    } 
} 

, bu görünmüyor. Benzer bir uygulama buldum, ancak SingletonHolder sınıfı statik değildi ve açık (boş) statik bir kurucu içeriyordu.

Bu, Singleton desenini uygulamak için geçerli, tembel, diş güvenli bir yöntem midir? Yoksa kayıp olduğum bir şey mi var?

cevap

6

Jon Skeet, C# içindeki Singleton desenini uygulama hakkında bir article yazmıştır. Açıkça onu özel hale getirmek için boş olsa bile bir kurucu bildirmek sahip özellikle

public sealed class Singleton 
{ 
    Singleton() 
    { 
    } 

    public static Singleton Instance 
    { 
     get 
     { 
      return Nested.instance; 
     } 
    } 

    class Nested 
    { 
     // Explicit static constructor to tell C# compiler 
     // not to mark type as beforefieldinit 
     static Nested() 
     { 
     } 

     internal static readonly Singleton instance = new Singleton(); 
    } 
} 

Uyarı:

tembel uygulama versiyonu 5'tir.

İlgili konular