2009-12-20 50 views
0

因为接口不包含静态方法,是否有任何方法可以使强制实现的派生类中的静态方法?有没有什么办法可以使强制实现的派生类中实现静态方法?

如果不是,还有其他方法可以实现这个目标吗?

其实我做我所有的数据库类是这样的:

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

你想做什么? – 2009-12-20 14:03:39

回答

6

没有,没有。静态方法不是多态的。

目前没有好的做法,真的。你可以有并行类型层次结构 - 一个用于实例,另一个用于实例方法的“元”层次结构,否则你会有静态的,但也会变得非常难看。

如果您可以详细说明您要做什么,我们可能会提出其他建议。

编辑:看起来你真的想要取回各个项目或集合一个Repository<T>平行的层次结构。

0

如果您需要虚拟构造函数,请使用抽象工厂类。

否则,您需要更具体地说明您希望完成什么。

1

如果我猜你正在努力做的正确,你可以有一个单独的类加载持久化对象,并让它实现Get函数(类似MyClass c = new MyClassLoader(database).Get(25))。

我会这么说,因为你似乎已经得到停留在必须存在的Get功能之前,有任何情况,因此得出结论,他们必须是静态的事实。通过将加载代码分离成另一种类型,您可以避免这种情况。

+0

你让Get方法是静态的吗? – anonymous 2009-12-20 14:27:18

+0

不,只需在加载器实现的ILoader接口中添加一些非静态Get方法即可。 – 2009-12-20 14:46:48

相关问题