泛型继承和委托

本文关键字:继承 泛型 | 更新日期: 2023-09-27 18:17:28

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

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());

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

泛型继承和委托

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

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