技术开发 频道

c#设计模式实例


一般的.net框架下的单件模式
public sealed class DotnetSingleton 
{
/// <summary>
/// 加入readonly , 使得_instance只能在声明时或构造函数中被初始化
/// </summary>
static readonly DotnetSingleton _instance = new DotnetSingleton();

// 告诉C#编译器不要对该类进行类别标记, 并可用于初始化_instance
static DotnetSingleton()
{
}

private DotnetSingleton()
{
}

static public DotnetSingleton Instance
{
get { return _instance; }
}
}
   注:
   MSDN上关于readonly和const的区别:readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数。

   在.net框架下,我们通常使用static标识符来实现单件模式,由static定义的对象或函数只能通过class.*方式来引用那么很显然在一个应用程序中域中是不会出现多个类实例,并且访问区域是全局的。使用static标志使得类实例对象只在第一次调用时被分配一次,从而保证了线程访问的安全性并且它是依赖于公共语言库来实现对象初始化的,也省去了对象释放的过程。因此这也是在.net框架下实现单件模式的普遍选择。然而,该方案有两个缺点:第一,由于初始化是由框架完成的这使得你对对象初始化之前的工作失去了控制能力;第二,如果该类存在其他的静态数据成员,那么在这些数据成员被引用时_instance也会被初始化掉,这显然不是你想要的结果。

0
相关文章