我的代碼如下: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...
}
非常具有啓發性,謝謝!閱讀下面的答案,我想知道一個可能的解決方案。隨意發表評論。 – 2009-04-30 23:42:08
畢竟,他們不稱爲靜態 – BlackTigerX 2009-04-30 23:58:26