2015-11-12 24 views
0

我有這個ObservableCollection<MyData> list,我想我的辛格爾頓內插入:辛格爾頓用的ObservableCollection爲成員

public sealed class Singleton 
{ 
    private static volatile Singleton instance; 
    private static object syncRoot = new Object(); 
    public static ObservableCollection<MyData> list {get; set;} 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      lock (syncRoot) 
      { 
       if (instance == null) 
       { 
        instance = new Singleton(); 
        list = new ObservableCollection<MyData>(); 
       } 
      } 
     } 

     return instance; 
     } 
    } 
} 

這是對這個定義的正確方法?

回答

1

我不認爲這是。如果ObservableCollection應該是Singleton類的成員,請在Singleton's私有構造函數中將其實例化。如果不應該,我不明白你爲什麼這樣做。撥打Singleton.list之前會發生什麼?Singleton.Instance之前? NullReferenceException。既然它的制定者是公開的,它也可以從外部設置,這可能不是你想要的。

我會修改你的代碼是這樣的:

public sealed class Singleton 
{ 
    private static volatile Singleton instance; 
    private static object syncRoot = new Object(); 

    public ObservableCollection<MyData> list {get; private set;} 

    private Singleton() { 
     list = new ObservableCollection<MyData>(); 
    } 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      lock (syncRoot) 
      { 
       if (instance == null) 
       { 
        instance = new Singleton(); 
       } 
      } 
     } 

     return instance; 
     } 
    } 
}