c# - 返回派生类实例的抽象方法

标签 c# inheritance abstract-class

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

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/

相关文章:

c# - 如何解决这个通用的存储库模式问题?

c# - 我们应该密封单例吗?我们应该首先尝试继承单例吗?

inheritance - TypeScript - 更改 child 的属性类型,这可能吗?

c# - 最佳实践 : new DateTime() vs DateTime. Parse()

c# - 使用访问者模式从平面 DTO 构建对象图

c# - IList<Type> 到 IList<BaseType>

java - 如何为子类提供静态字段?

PHP fatal error : Can't inherit abstract function

java - 助手/实用程序类应该是抽象的吗?

c# - Facebook SDK 在 Windows 10 应用程序上加载时出错(XAML、C#)