关于Singleton C#的两个问题

时间:2010-04-06 20:04:22

标签: c# .net design-patterns singleton

考虑以下代码

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

     static Singleton() {}
     private Singleton() {}
 }

问题

1)这里静态构造函数的目的是什么? (我知道在创建类的第一个实例之前将调用静态构造函数)。但是在上面代码的上下文中 没有静态构造函数我不能使用它吗?

2)我听说单身人士的一个优点是它可以延伸到工厂。    既然它是一个密封的类,你将如何将它扩展到工厂?你能举一些例子吗?

2 个答案:

答案 0 :(得分:7)

静态构造函数确保单例在使用之前不会构造。如果静态构造函数不存在,CLR在运行类型初始化程序时有更多的余地。有关详细信息,请参阅我的article on beforefieldinit和我关于.NET 4 type initialization changes的博文。

至于将单身人士变成工厂 - 你真的需要提供更多的背景。您的Instance属性可以选择是否始终返回对同一对象的引用,我想......

答案 1 :(得分:0)

  1. 不需要静态构造函数。 SKEET!
  2. 我从来没有听说过这个。显然,如果课程是密封的,你就不能。但是你可以轻松地将它重写为工厂,因为只有一种方法可以实例化它 - 通过一个属性。将其更改为方法,然后您就可以开始工厂了。该方法每次都可以返回相同的实例,或者可以从池中返回实例,或者做任何想做的事情。
  3. 我不建议您拥有工厂属性,因为属性不应该做太多工作。