我正在尝试在C#中执行类似的操作
public class ParentClass {
public static ParentClass GetSomething()
{
var thing = new // ?????
return thing;
}
}
public class ChildClass : ParentClass {
}
然后,我希望能够像下面这样在子类上调用静态方法:
ChildClass blah = ChildClass.GetSomething();
例如在子类上调用静态方法时,我想实例化子类的实例。但是我只想要在父级上定义的静态方法。这是可能吗?我什至会满意:
ChildClass blah = (ChildClass) ChildClass.GetSomething();
谢谢!
最佳答案
您不能“覆盖”静态方法。但是您可以使用泛型来告诉ParentClass您实际上意味着哪个派生类。这有点丑陋,但有效:
class ParentClass<T> where T : ParentClass<T>, new()
{
public static T GetSomething()
{
T thing = new T();
return thing;
}
}
class ChildClass : ParentClass<ChildClass>
{
}
测试:
ChildClass x = ChildClass.GetSomething(); // works