2013-11-20 33 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; } 
    } 
}