我使用本文来实现弱引用处理程序模式。
在我发现WPF中的事件处理程序不是EventHandler的实例之前,代码真的很完美。如PropertyChangedEventHandler
:
public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);
虽然我认为它们与EventHandler<PropertyChangedEventArgs>
具有相同的签名,其中EventHandler
是:
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
我试图直接转换它,但c#说"我不能这样做"。
我的问题是能否顺利转换这两种委托?
它们之间有什么不同?
我有一些带有类型参数的委托,我像这样转换它们:
public void AddHandler(EventHandlerUntyped<TKey> EventHandlerMethod)
{
SomeEventTakingTypedEventHandler += new TypedEventHandler<TKey, TValue>(EventHandlerMethod);
}
这些是委托:
public delegate void TypedEventHandler<TKey, TValue>(object sender, TypedEventArgs<TKey, TValue> ItemInfo);
public delegate void EventHandlerUntyped<TKey>(object sender, EventArgsUntyped<TKey> ItemInfo);
PS:类型化事件参数继承了非类型化事件参数。
我知道这不是你想要的,但我认为这是一个很好的提示。您可以忽略TKey
并尝试如下操作:
new EventHandler<PropertyChangedEventArgs>(SomeMethodUsingPropertyChangedEventHandlerSignature).
new PropertyChangedEventHandler(SomeMethodUsingCommonEventHandlerSignature);