在类中初始化单例而不是实例?

时间:2011-12-12 19:19:43

标签: c# design-patterns singleton

为什么不能这样做?

class foo {
  private static foo instance  = new foo();
  List <string> messages = new List<string>();


  private foo(){}
  public static void doSomething(){..}

}

编辑:

我的意思是这样做有区别:

class foo {
  private static foo instance  = new foo();
  List <string> messages = new List<string>();


  private foo(){}
  public static void doSomething(){..}

}

class foo {
  private static foo instance;
  List <string> messages = new List<string>();


  private foo(){}
  public static void doSomething(){..}

  public foo getInstance(){
    if(instance!=null){
       return instance;
    }
 }
}

3 个答案:

答案 0 :(得分:1)

您的方法doSomething()缺少返回类型。尝试:

class Foo {
    private static Foo instance = new Foo();
    List<string> messages = new List<string>();

    private Foo() { }

    public static void doSomething() {
        // Make any necessary accesses to "instance" here.
    }
}

答案 1 :(得分:1)

你可以,你只是没有给doSomething()返回类型。

答案 2 :(得分:1)

这是为支持它的语言实现Singleton模式的非惰性方法。这样做是完全可以接受的,特别是因为它是实现线程安全的Singleton的方法之一。但是,如果您的Singleton对象很昂贵(请参阅lazy initialization)来创建,那么以这种方式创建它可能不合适。

如果您的代码无法编译,正如other answers指出的那样,doSomething方法的语法不正确。