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

标签 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>();
    }
}

最佳答案

您可以为类 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>
{
}

关于c# - 在派生类中调用泛型函数的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934439/

相关文章:

c# - AsyncTimeout Action 过滤器有什么意义?

c# - 组合框上的 IsEditable 没有效果

java - 传递泛型映射有什么问题

java - Java 中的泛型方法和继承

java - 实例化基类扩展时出现问题

c# - 将数据添加到缓存时出现重复的键

c# - 处理线程中 catch block 内抛出的异常的最佳实践。 (。网)

C++,要返回各种类实例如何创建模板?

c++ - 为什么是 "an inherited constructor is not a candidate for initialization from an expression of the same or derived type"?

java - 私有(private)变量和继承的构造函数