Welcome

首页 / 软件开发 / C# / 在C#中实现Singleton

在C#中实现Singleton2010-08-14 博客园 SoulEdgeSingleton 设计模式的下列实现采用了 Design Patterns: Elements of Reusable Object-Oriented Software[Gamma95] 中所描述的解决方案,但对它进 行了修改,以便利用 C# 中可用的功能,如属性:

using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}

该实现主要有两个优点:

• 由于实 例是在 Instance 属性方法内部创建的,因此类可以使用附加功能(例如,对子 类进行实例化),即使它可能引入不想要的依赖性。

• 直到对象要 求产生一个实例才执行实例化;这种方法称为"懒实例化"。懒实例化 避免了在应用程序启动时实例化不必要的 singleton。

但是,这种实现的 主要缺点是在多线程环境下它是不安全的。如果执行过程的不同线程同时进入 Instance 属性方法,那么可能会创建多个 Singleton 对象实例。每个线程都会 执行下列语句,并决定必须创建新的实例:

if (instance == null)

解决此问题的方法有很多。一种方法是使用被称为 Double-Check Locking[Lea99] 的技术。而 C# 与公共语言运行库也提供了一种"静态初始 化"方法,这种方法不需要开发人员显式地编写线程安全代码,即可解决这 些问题。