有没有办法在实现/派生类中强制实现静态方法?

时间:2009-12-20 13:59:41

标签: c#

由于接口不包含静态方法,有没有办法使实现/派生类中必须实现静态方法?

如果没有,还有其他方法可以达到这个目标吗?

我实际上使我的所有数据库类看起来像这样:

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(){}
}

3 个答案:

答案 0 :(得分:6)

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

目前还没有好办法,真的。您可以使用并行类型层次结构 - 一个用于实例,一个用于实例方法的“元”层次结构,否则您将拥有静态层次结构,但这也非常难看。

如果您可以详细说明您的目标,我们可能会提出其他建议。

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

答案 1 :(得分:1)

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

我这样说是因为你似乎已经陷入了这样一个事实:Get函数必须在任何实例之前存在,因此得出结论它们需要是静态的。通过将加载代码分成另一种类型,您可以避免这种情况。

答案 2 :(得分:0)

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

否则,你需要我更具体地说明你想要完成的事情。