2012-05-11 9 views
0

オブジェクトの「同じ」インスタンスだけを返すC#クラスを書くにはどうすればよいですか?これは効果的にシングルトンですか?これは「Effective Java 2nd」の本で言及されています。常に同じインスタンスを返すクラス

私は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

はい、これはシングルトンパターンです。私たち自身のJon SkeetのC#実装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の「Third Version」までスクロールします。 – jason

1

シングルトンオブジェクトを作成するのは高価ですが、アプリケーションを実行するたびに使用されない場合は、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; } 
    } 
} 
関連する問題