【发布时间】:2010-10-23 00:18:33
【问题描述】:
我有以下代码:
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...
}
【问题讨论】:
标签: c#