C# でシングルトン パターンを実装するには、さまざまな方法があります。ここでは、最も一般的に見られる、スレッドセーフではないものから始めて、完全に遅延ロードされ、スレッドセーフで、シンプルで高性能なバージョンまで、エレガンスの逆の順序でそれらを紹介します。
私はグーグルで「シングルトンを実装する方法」を探していて、3つの方法を見つけました.どのシングルトン実装がC#より優れていますか?
1)このコードは lock() を使用します
public class Singleton
{
// Static object of the Singleton class.
private static volatile Singleton _instance = null;
/// <summary>
/// The static method to provide global access to the singleton object.
/// </summary>
/// <returns>Singleton object of class Singleton.</returns>
public static Singleton Instance()
{
if (_instance == null)
{
lock (typeof(Singleton))
{
_instance = new Singleton();
}
}
return _instance;
}
/// <summary>
/// The constructor is defined private in nature to restrict access.
/// </summary>
private Singleton() { }
}
2)このコードは static init です
/// <summary>
/// A sealed class providing access to it's ONLY readonly static instance.
/// </summary>
sealed class SingletonCounter
{
public static readonly SingletonCounter Instance =
new SingletonCounter();
private SingletonCounter() {}
}
3)このコードは Lazy 型を使用しています。
public sealed class Singleton
{
private static readonly Lazy<Singleton> lazy =
new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance { get { return lazy.Value; } }
private Singleton()
{
}
}