【发布时间】:2012-06-14 15:22:22
【问题描述】:
我有一个(现在)是静态的类:
public static class Grob
{
public static void Frob()
{
Foo.Bar();
}
}
而且效果很好。代码调用:
Grob.Frob();
世界上一切都很好。现在我希望我的类实现一个接口:
public static class Grob : IOldNewGrob
{
public static void Frob()
{
Foo.Bar();
}
}
不幸的是,这不起作用,因为reasons。
所以我会尝试将班级改为singleton:
public sealed class Grob
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Grob() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
效果很好,只是它不起作用-代码不再编译:
Grob.Frob();
在其他语言中这不是问题。我将创建一个全局 Grob 函数(称为 Grob,因为这是现有代码需要的名称):
function Grob(): GrobSingleton;
{
return Grob.Instance;
}
//and rename Grob class to something else
public sealed class GrobSinglton
{
...
}
除了 C# 没有全局函数。
最后:
- 我不需要全局函数
- 我不需要静态类来实现接口
- 我不需要单身
我只是希望一切正常。
【问题讨论】:
-
你为什么不能打电话给
Grob.Instance.Frob()?这就是单例的工作方式。 -
@cdhowie 我可以打电话给
Grob.Instance.Frob();但现有代码没有。
标签: c# singleton static-class