我有一个带有模板的Base类。在这个类中,有一个抽象方法,在模板中返回类型的类型(见下文)。
我希望创建一个新类Derived,它继承自这个Base类,它(如预期的那样)必须“覆盖”该方法。
我的问题是如何声明和实现Derived类和“重写”方法?
提前致谢,
盖。
public abstract class Base<MyType>
{
protected abstract MyType Foo();
}
public class Derived : Base ?????
{
protected override MyType Foo() ?????
{
return new MyType();
}
}
答案 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();
}
}