使用 C# 实现的单例可能类似于:
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
如果我使用 static 来实现它,如下所示:
public static class Globals{
public static Singleton Instance = new Singleton();
}
这样,应用程序也应该只获取整个应用程序的一个实例。
那么这两种方法有什么区别呢?为什么不直接使用静态成员(更简单直接)?
如果使用第二种方法:
public static class Globals{
public static Singleton Instance = new Singleton();
}
没有什么可以阻止某人做:
Singleton anotherInstance = new Singleton(); // Violates singleton rules
您也不会获得与您的第一个版本(尝试)实现的相同的延迟初始化,而且您使用的是公共字段,如果您需要更改值时发生的情况,它不允许您在将来获得相同的灵活性已获取。
请注意,.NET 4 提供了一种可能更好的创建单例的方法:
public class Singleton
{
private static readonly Lazy<Singleton> instance = new Lazy<Singleton>( ()=> new Singleton());
private Singleton() {}
public static Singleton Instance
{
get
{
return instance.Value;
}
}
}
这很好,因为它完全是懒惰的and完全线程安全,但也很简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)