将参数化委托强制转换为非参数化模拟
本文关键字:参数 模拟 转换 | 更新日期: 2023-09-27 17:53:18
谁能建议为什么我不能用适当的类型参数将非泛型委托转换为泛型?特别是有如下所示的两个委托
-
public delegate void NotifyCollectionChangedEventHandler(object sender, NotifyCollectionChangedEventArgs e)
-
public delegate void WeakEventHandler<TSource, TEvent>(TSource sender, TEvent e)
和委托变量
-
NotifyCollectionChangedEventHandler handler;
我不能将处理程序转换为WeakEventHandler<object, NotifyCollectionChangedEventArgs>
。有人知道这是什么原因吗?
简单地说,它们是不同的类型。假设您有两个这样的类:
public class A1
{
public int Value { get; set; }
}
public class A2
{
public int Value { get; set; }
}
它们是不同的类,尽管看起来是等价的——而且你不能在A1
和A2
之间进行强制转换。委托也是一样。
你可以做的是包装现有的委托:
var weakHandler = new WeakEventHandler<object, NotifyCollectionChangedEventArgs>(handler);
创建一个新的委托,该委托在调用新委托时调用原始委托。