是否可以创建必须返回派生类的实例的抽象方法?我可以做这个:

abstract class Base
{
   public abstract Base GetObj();
}

class Derived : Base
{
   public Derived() { }

   public override Base GetObj()
   {
       return new Derived();
   }
}

但是我想知道是否有一种方法可以强制Derived::GetObj()返回Derived吗?

谢谢。

最佳答案

使用泛型应该可以实现以下目的:

abstract class Base<T>
    where T : Base<T>
{
   public abstract T GetObj();
}

class Derived : Base <Derived>
{
   public Derived() { }

   public override Derived GetObj()
   {
       return new Derived();
   }
}

您甚至可以进一步简化此操作(如果所有派生实例都是使用默认构造函数创建的):
abstract class Base<T>
    where T : Base<T>, new()
{
    public static T GetObj()
    {
        return new T();
    }
}

class Derived : Base<Derived>
{
    public Derived() { }
}

关于c# - 返回派生类的实例的抽象方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9361401/

10-13 03:18