在派生类中调用泛型函数的更好方法

时间:2015-04-29 04:34:05

标签: c# generics inheritance polymorphism

我想知道有没有办法设置我的Base类,这样我就不需要在调用Activate()时覆盖派生类。它使用派生类的泛型类型调用相同的函数。

public abstract class Base
{
    public abstract void Activate();
}

public class A : Base
{
    public override void Activate()
    {
        Foo<A>();
    }
}

public class B : Base
{
    public override void Activate()
    {
        Foo<B>();
    }
}

1 个答案:

答案 0 :(得分:5)

您可以为类AB创建一个中间通用基类:

public abstract class Base
{
    public abstract void Activate();
}

public abstract class Base<T> : Base
    where T : Base
{
    public override void Activate()
    {
        Foo<T>();
    }
}

public class A : Base<A>
{
}

public class B : Base<B>
{
}