2013-11-20 47 views
0

我有以下代碼來確保Watin的瀏覽器只有一個實例。單例對象的語法

public sealed class BrowserIE 
{ 

    static readonly IE _Instance = new IE(); 

    static BrowserIE() 
    { 
    } 

    BrowserIE() 
    { 
    } 

    public static IE Instance 
    { 
     get { return _Instance; } 
    } 
} 

但我無法弄清楚在哪裏應用這個類內的設置。如何/我在哪裏可以進行以下設置,以上面的代碼,使他們生效之前

Settings.Instance.MakeNewIeInstanceVisible = false;

我知道我可以使用下面的這些工作的方法中,但我不能得到正確的語法我上例中_Instance是靜態只讀的。

Settings.Instance.MakeNewIeInstanceVisible = false; 
_Instance = new IE(); 
+1

您可以使用屬性初始化:'靜態只讀IE _instance =新的IE {MakeNewIeInstanceVisible =(false)};' – polkduran

+0

也可以使用'懶惰 _Instance = new懶惰(()=> new IE(){MakeNewIeInstanceVisible = false});'然後用'_Instance.Value'訪問它, 'System.Lazy'擅長於。 – Seph

回答

1

爲什麼不使用靜態構造函數?

public sealed class BrowserIE 
{ 
    static readonly IE _Instance; 

    static BrowserIE() 
    { 
     Settings.Instance.MakeNewIeInstanceVisible = false; 
     _Instance = new IE(); 
    } 

    BrowserIE() 
    { 
    } 

    public static IE Instance 
    { 
     get { return _Instance; } 
    } 
} 
1

如果你想實現一個線程保存單,並使用.NET 4.0,你可以使用System.Lazy<T>

public sealed class BrowserIE 
{ 
    private static readonly Lazy<BrowserIE> _singleInstance = new Lazy<BrowserIE>(() => new BrowserIE()); 

    private BrowserIE() { } 

    public static BrowserIEInstance 
    { 
     get { return _singleInstance.Value; } 
    } 
}