我正在尝试在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

10-08 18:16