由于接口不包含静态方法,有没有办法使实现/派生类中必须实现静态方法?
如果没有,还有其他方法可以达到这个目标吗?
我实际上使我的所有数据库类看起来像这样:
class MyClass : IMyClass, IPersistant
{
public int ID {get;set}
.....
.....
public int SaveOrUpdate(){}//returns the ID
public static MyClass Get(int id){}
public static IEnumerable<MyClass> Get(){}
public bool Delete(){}
}
答案 0 :(得分:6)
不,没有。静态方法不是多态的。
目前还没有好办法,真的。您可以使用并行类型层次结构 - 一个用于实例,一个用于实例方法的“元”层次结构,否则您将拥有静态层次结构,但这也非常难看。
如果您可以详细说明您的目标,我们可能会提出其他建议。
编辑:看起来你真的想要一个Repository<T>
并行层次结构来获取单个项目或集合。
答案 1 :(得分:1)
如果我猜你正在尝试做什么,你可以有一个单独的类来加载持久对象,让它实现Get函数(类似MyClass c = new MyClassLoader(database).Get(25)
)。
我这样说是因为你似乎已经陷入了这样一个事实:Get函数必须在任何实例之前存在,因此得出结论它们需要是静态的。通过将加载代码分成另一种类型,您可以避免这种情况。
答案 2 :(得分:0)
如果需要虚拟构造函数,请使用抽象工厂类。
否则,你需要我更具体地说明你想要完成的事情。