使用模板覆盖基类的抽象类

时间:2014-12-29 12:27:33

标签: c# templates inheritance override abstract-class

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

我希望创建一个新类Derived,它继承自这个Base类,它(如预期的那样)必须“覆盖”该方法。

我的问题是如何声明和实现Derived类和“重写”方法?

提前致谢,

盖。

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


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

3 个答案:

答案 0 :(得分:2)

您必须指定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);
    }   
}

答案 1 :(得分:2)

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

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
    }
}

答案 2 :(得分:1)

以相同的方式声明:

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