开门见山。假设我有一个简单的继承模型
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/