C#コンパイラ:非静的コンテキストで静的メソッドにアクセスできません
私は以下のコードを持っています:public class Anything
{
public int Data { get; set;}
}
public class MyGenericBase<T>
{
public void InstanceMethod(T data)
{
// do some job
}
public static void StaticMethod(T data)
{
// do some job
}
// others members...
}
public sealed class UsefulController : MyGenericBase<Anything>
{
public void ProxyToStaticMethod()
{
StaticMethod(null);
}
// others non derived members...
}
public class Container
{
public UsefulController B { get; set; }
}
public class Demo
{
public static void Test()
{
var c = new Container();
c.B.InstanceMethod(null); // Works as expected.
c.B.StaticMethod(null); // Doesn't work.
// Static method call on object rather than type.
// How to get the static method on the base type ?
c.B.ProxyToStaticMethod(); // Works as expected.
}
}
コンパイラは非常に怒っています...私はエラーメッセージを理解するが、私はこれを解決する方法を知らない。私は静的メソッド呼び出しを行うためのオブジェクトではなくタイプを取得しようとしていましたが、正しく行う方法は見つかりませんでした。さらに、これはエレガントではない何かの結果をもたらします。
基本的に、GenericBaseは、多くの静的メソッドといくつかのインスタンスメソッドを持つフレームワークのクラスです。コントローラーがこのクラスを入力して拡張しています。
コンテナーは論理的に関連するコントローラーのグループです。
面白いこと:このコードのJavaバージョンは正しくコンパイルされますが、警告が表示されます。実行も正しいです。
これを解決するためのデザインパターンは存在しますか?
あなたの入力をありがとう!
私はあなたの答えのおかげで、この問題を取り除く方法を見つけました。それはうまくいくようですが、私は、副作用が正しいかどうかを知ることはできません。
public class GenericBase<T> : MyGenericBase<T>
{
// Create instance calls here for every base static method.
}
public sealed class UsefulController : GenericBase<Anything>
{
// others non derived members...
}
非常に有益な、ありがとう!以下の答えを読んで、私は可能な解決策について疑問に思います。お気軽にコメントしてください。結局のところ –
、彼らは何のためにもSTATICと呼ばれていません – BlackTigerX