c# - 通用继承和委托(delegate)

标签 c# generics inheritance dictionary

开门见山。假设我有一个简单的继承模型

class Base {}
class Inh : Base {}

我想做这样的事情(注意 - 该代码无法编译):

class Test
{
    private Dictionary<Type, Action<Base>> dict;

    public Test()
    {
         dict = new Dictionary<Type, Action<Base>>();
    }

    public void Test(Inh inh)
    {
    }

    public void Add<T>(Action<T> callback) 
        where T : BasePackage
    {
        dict.Add(typeof(T), callback);
    }
}

主要思想是使用字典作为函数调用者。例如,如果我添加 Test 函数作为回调,我稍后可以执行如下操作:

dict[typeof(Inh)](new Inh());

不幸的是,我自己找不到解决方案,所以我寻求帮助。如果有人有任何建议,我们将不胜感激。

最佳答案

您可以这样做来强制类型。请注意,如果您查找并调用错误类型的委托(delegate),这可能会在运行时失败(由于无效的强制转换)。这种可能的失败情况就是为什么这不符合委托(delegate)使用中自动逆变的标准的原因。

public void Add<T>(Action<T> callback) 
        where T : Base
    {
        dict.Add(typeof(T), Base b => callback((T)b));
    }

关于c# - 通用继承和委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435958/

相关文章:

c# - CSharpCodeProvider.CompileAssemblyFromFile 中的最大错误数

java - 用java实现有界泛型

Java泛型——获取类的实例

Java继承与初始化

javascript - 扩展 React.js 组件

c# - 从 .Net 应用程序打开 Windows 7 帮助 (helpPane.exe)

c# - HANA服务层: Could not establish trust relationship for the SSL/TLS secure channel

c# - C# 中单个属性的多个属性的继承

c# - 排名标识符无效

java - 方法不适用于有关 Java 中泛型或类型删除的参数