2010-04-11 15 views
5

he implementado un patrón Singleton así:¿Es esta una implementación de Singleton válida, floja y segura para subprocesos para C#?

public sealed class MyClass { 

    ... 

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

    ... 

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

De googlear alrededor de las implementaciones de C# Singleton, que no parece que esta es una forma común de hacer las cosas en C#. Encontré una implementación similar, pero la clase SingletonHolder no era estática e incluía un constructor estático explícito (vacío).

¿Es esta una forma válida, floja y segura de subprocesos para implementar el patrón de Singleton? ¿O hay algo que me falta?

Respuesta

6

Jon Skeet ha escrito un article sobre la implementación del patrón de Singleton en C#.

La aplicación perezoso es la versión 5:

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(); 
    } 
} 

Aviso en particular que usted tiene que declarar explícitamente un constructor, incluso si está vacío con el fin de hacerlo privado.

Cuestiones relacionadas