私は(今)静的なクラスを持っています:
public static class Grob
{
public static void Frob()
{
Foo.Bar();
}
}
そして、それはうまくいきます。コード呼び出し:
Grob.Frob();
そして、すべてが世界で正しいです。今、私は私のクラスにインターフェースを実装させたいです:
public static class Grob : IOldNewGrob
{
public static void Frob()
{
Foo.Bar();
}
}
残念ながら、それはうまくいきません。理由があります。
だから私はクラスをシングルトンに変更してみます:
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#にはグローバル関数がありません。
最終的には:
- グローバル関数は必要ありません
- インターフェイスを実装するために静的クラスは必要ありません
- シングルトンは必要ありません
私はそれをすべて機能させたいだけです。