オブジェクトの「同じ」インスタンスのみを返すクラスをC#で作成するにはどうすればよいですか?これは事実上シングルトンですか、それとも異なりますか?これは、EffectiveJava2ndadditionという本で言及されています。
私はC#4.0を使用しています(テクノロジーの障壁はありません)。
はい、これはシングルトンパターンです。ここで、私たち自身のJon SkeetのC#実装に基づいた優れたディスカッションを見つけることができます。
シングルトンオブジェクトの作成に費用がかかるが、アプリケーションを実行するたびに使用されるわけではない場合は、レイジーの使用を検討してください。
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; }
}
}
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;
}
}
}
}