如何创建一个只能在C#中拥有单个实例的类

我想知道是否有一种机制或模式只允许C#中的一个类实例。 我听说过Singleton类,但我不知道如何使用它。

使用singleton,这是一个只允许创建自身的单个实例的类。

 public sealed class Singleton { public static readonly Singleton instance = new Singleton(); private Singleton() {} } 

这种模式的操作很简单,可以简化为以下几种:

隐藏Singleton类的构造函数,以便不会实例化客户端。 声明Singleton类私有成员变量,该变量包含对我们处理的唯一实例的引用。 在类Singleton中提供一个函数或属性,该函数或属性提供对Singleton实例维护的函数或属性的访问。

您需要阅读我们自己的Jon Skeet的博客(在C#中实现Singleton模式) 。

Singletom Pattern的意图是“确保一个类只有一个实例,并提供一个全局访问点”。

这是你如何做到的。

 public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } public static Singleton Instance { get { return instance; } } } 

这可以是Singletone实现的示例

 public sealed class CSingleTone { private static CSingleTone instance; public int SomeValue{ get; set; } public static CSingleTone Instance { get { if (instance == null) instance = new CSingleTone(); return instance; } } private CSingleTone() { } } 

可以这样使用

 int r = CSingleTone.Instance.SomeValue; 

单身人士不是一个阶级,而是一个模式。 这是一个例子:

 class Singleton { private Singleton() {} static private Singleton GetIt() { return theOne; } static private Singleton theOne = new Singleton(); } 

一种选择是仅声明一个只包含static成员的static类。 或者,您可以通过为类提供private构造函数来实现Singleton模式:

 public class MySingleton { public static readonly MySingleton Instance = new MySingleton(); private MySingleton() { } // Members ... } 

这是一个单例类的简单例子

 class Program { static void Main() { SiteStructure s = SiteStructure.Instance; } } public sealed class SiteStructure { static readonly SiteStructure _instance = new SiteStructure(); public static SiteStructure Instance { get { return _instance; } } SiteStructure() { // Initialize. } } 

在这里,Readonly允许thread-safety ,这意味着它只能allocated once 。 它有一个public static getter 。 调用者使用Instance property来获取单例实例。 已知Sealed允许编译器在JIT compilation期间执行特殊优化。 上面的最终方法是私有实例构造函数和Initialize方法。 Private constructors意味着类only allocate itself