有没有一种方法可以将静态方法放在可以返回派生类型的抽象类中?
静态方法甚至不知道在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
代表您域中的某些内容(它们是更具体的派生类型),并且知道如何加载所有这些对象?这是两个职责,这并不酷。