使用模板重写基类的抽象类

本文关键字:基类 抽象类 重写 | 更新日期: 2023-09-27 18:35:43

我有一个带有模板的基类。在此类中,有一个抽象方法,其返回类型为模板中的类型(见下文)。

我希望创建一个新的类,派生,它继承自这个基类,它(如预期的那样)必须"覆盖"该方法。

我的问题是如何声明和实现派生类和"重写"方法?

提前感谢分配,

家伙。

public abstract class Base<MyType> 
{
    protected abstract MyType Foo();
}

public class Derived : Base ????? 
{
    protected override MyType Foo() ?????
    {
         return new MyType();
    }   
}

使用模板重写基类的抽象类

只需指定泛型基类的实际类型,即:

public class Derived : Base<MyType>
{
    protected override MyType Foo()
    {
        // some implementation that returns an instance of type MyType
    }
}

其中MyType是要指定的实际类型。

另一种选择是将派生类保留为泛型,如下所示:

public class Derived<T> : Base<T>
{
    protected override T Foo()
    {
        // some implementation that returns an instance of type T
    }
}

必须为Base指定具体类型或使Derived也泛型:

public class Derived : Base<int> 
{
    protected override int Foo();
    {
         return 0;
    }   
}

或通用版本:

public class Derived<TMyType> : Base<TMyType> 
{
    protected override TMyType Foo();
    {
         return default(TMyType);
    }   
}

以相同的方式声明它:

public class Derived<MyType> : Base<MyType>
{
    protected override MyType Foo()
    {
         return new MyType();
    }   
}