- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有许多类做不同的事情,但使用来自 http://www.yoda.arachsys.com/csharp/singleton.html 的相同单例模式。
public sealed class Singleton
{
static Singleton instance=null;
static readonly object padlock = new object();
Singleton()
{
}
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance==null)
{
instance = new Singleton();
}
return instance;
}
}
}
}
有没有人有一个巧妙的方法可以在不同的类之间重用尽可能多的通用单例代码?
例如,如果我有 SingletonJob1 和 SingletonJob2,我希望只有在我移动到其他 Singleton 模式之一时才能更改代码。
编辑:是的,正如人们从 http://www.yoda.arachsys.com/csharp/singleton.html 中指出的方法 5代码更少。我确实读到了页面的末尾!我选择方法 2 是因为 Singleton 对象与硬件设备相关,我只想在程序的任何给定运行中初始化和使用其中的几个。方法 5 将立即将它们全部初始化。
最佳答案
您是否有任何理由使用该版本而不是仅在声明中初始化实例的更简单的版本?
public class Singleton
{
private static Singleton instance = new Singleton();
public static Singleton Instance { get { return instance; } }
// Only use this if you really need it - see the page for details
static Singleton() {}
private Singleton()
{
// I assume this logic varies
}
}
这个模式足够短,我认为将它包含在任何地方都不是什么大问题。
我建议您考虑一下您是否真的需要那么多单例;它们通常不利于可测试性等。
编辑:如果您真的非常想要懒惰并且您使用的是 .NET 4,则可以使用 the singleton page's new home 上的第 6 种模式来实现它。 :
public sealed class Singleton
{
private static readonly Lazy<Singleton> lazy =
new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance { get { return lazy.Value; } }
private Singleton()
{
}
}
关于c#单例代码重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179893/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!