2011-12-12 63 views
-2

为什么你不能做到以下几点?在类中而不是实例中初始化单例?

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; 
    } 
} 
} 
+0

你不能做什么?除了'doSomething'中缺少返回类型之外,这里一切都很好。 – spender

回答

1

这是为支持它的语言实现Singleton模式的非懒惰方法。这是完全可以接受的,特别是因为它是实现线程安全Singleton的方法之一。但是,如果您的Singleton对象的开销很大(请参阅lazy initialization),则可能不适合以此方式创建它。

如果您的代码不能编译,如otheranswers指出,您的doSomething方法的语法不正确。

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

你可以,你刚才并没有给出返回类型doSomething()