2012-05-11 2 views
0

Как написать класс в C#, который возвращает только «тот же» экземпляр объекта? Действительно ли это синглтон или другой? Это было упомянуто в книге «Эффективное Java 2-е дополнение».Класс, который всегда возвращает тот же экземпляр

Я использую C# 4.0 (без технологического барьера).

+0

Да, это шаблон Singleton: http://en.wikipedia.org/wiki/Singleton_pattern –

+0

Ну лучший способ, до тех пор, как он может оставаться статичным просто иметь статический класс, если не использовать одноэлементный шаблон, есть много сообщений здесь об этом уже http://stackoverflow.com/questions/3136008/is-this-singleton-implementation-correct-and-thread-safe – Tenerezza

ответ

4

Да, это шаблон Singleton. Вы найдете отличную дискуссию, основанную на нашей собственной реализации C# для Java Sketch here.

+0

Спасибо, ребята. Всего лишь уточняю. – dotnetdev

0
using System; 

namespace DesignPatterns 
{ 
    public sealed class Singleton 
    { 
     private static volatile Singleton instance = null; 

     private Singleton() { } 

     public static Singleton Instance 
     { 
      get 
      { 
       if (instance == null) 
        Interlocked.CompareExchange(ref instance, new Singleton(), null); 

       return instance; 
      } 
     } 
    } 
} 
+0

Прокрутите страницу вниз до «Третьей версии» в http://www.yoda.arachsys.com/csharp/singleton.html. – jason

1

Если ваш объект Singleton дорог для создания, но не используется при каждом запуске приложения, подумайте об использовании Lazy.

public sealed class LazySingleton 
{ 
    private readonly static Lazy<LazySingleton> instance = 
     new Lazy<LazySingleton>(() => new LazySingleton()); 

    private LazySingleton() { } 

    public static LazySingleton Instance 
    { 
     get { return instance.Value; } 
    } 
}