我想知道是否有一种机制或模式只允许C#中的一个类实例。我听说过Singleton
课程,但我不知道如何使用它。
答案 0 :(得分:9)
使用singleton,这是一个只允许创建自己的单个实例的类。
public sealed class Singleton
{
public static readonly Singleton instance = new Singleton();
private Singleton() {}
}
此模式的操作很简单,可以简化为以下内容:
隐藏Singleton类的构造函数,以便不会实例化客户端。 声明Singleton类私有成员变量,该变量包含对我们处理的唯一实例的引用。 在类Singleton中提供一个函数或属性,提供对Singleton实例维护的函数或属性的访问。
答案 1 :(得分:7)
你需要阅读我们自己的Jon Skeet blog (Implementing the Singleton Pattern in C#)。
Singletom模式的意图是“确保一个类只有一个实例,并提供一个全局访问点”。
这是你如何做到的。
public sealed class Singleton {
private static readonly Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
答案 2 :(得分:6)
这可以是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;
答案 3 :(得分:3)
Singleton不是一个类,而是一个模式。 这是一个例子:
class Singleton {
private Singleton() {}
static private Singleton GetIt() {
return theOne;
}
static private Singleton theOne = new Singleton();
}
答案 4 :(得分:2)
一种选择是仅声明仅static
成员的static
课程。或者,您可以通过为类提供private
构造函数来实现Singleton模式:
public class MySingleton
{
public static readonly MySingleton Instance = new MySingleton();
private MySingleton() { }
// Members ...
}
答案 5 :(得分:2)
这是一个单例类
的简单示例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
来获取 singleton 实例。
已知Sealed
允许编译器在JIT compilation
期间执行特殊优化。上面的最终方法是私有实例构造函数和Initialize方法。 Private constructors
表示班级可以only allocate itself
。