有没有一种方法可以将静态方法放在可以返回派生类型的抽象类中?

静态方法甚至不知道在C#中是从什么类型调用的吗?

例如,基类可以是

public abstract class MyBase
{
    public static IEnumerable<TDerivedType> LoadAll()
    {
        //functionality here
    }
}


然后,如果MyDerivedType继承了MyBase,我希望能够调用MyDerivedType.LoadAll()

没什么太重要的-我目前正在使用通用的静态方法并调用MyBase.LoadAll<MyDerivedType>(),它可以正常工作,但看起来并不像“漂亮”。

最佳答案

静态成员不是继承的,因此必须以某种方式告知static方法什么是派生类型。您的解决方案是一种方法。另一个是以下内容:

public abstract class MyBase<T> where T : MyBase<T> {
    public static IEnumerable<T> LoadAll() { }
}


然后:

class Derived : MyBase<Derived> { }

var all = MyBase<Derived>.LoadAll();


就是说,我认为您的模型有问题。 MyBase代表您域中的某些内容(它们是更具体的派生类型),并且知道如何加载所有这些对象?这是两个职责,这并不酷。

07-24 16:54