1

我使用这里的文章来实现弱引用处理程序模式。

在发现WPF中的事件处理程序不是EventHandler的实例之前,代码真的很完美。如PropertyChangedEventHandler

public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);

虽然我认为它们具有相同的签名EventHandler<PropertyChangedEventArgs>,但在哪里EventHandler

public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

我尝试直接转换它,但 C# 说“我做不到”。
所以我的问题是可以顺利转换这两种代表吗?
他们之间有什么不同?

4

1 回答 1

0

我有一些带有类型参数的委托,我将它们转换如下:

    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:Typed Event Args 继承了 untyped event args。

我知道这不是您想要的,但我认为这是一个很好的提示。您可以忽略TKey并尝试以下操作:

   new EventHandler<PropertyChangedEventArgs>(SomeMethodUsingPropertyChangedEventHandlerSignature).
   new PropertyChangedEventHandler(SomeMethodUsingCommonEventHandlerSignature);
于 2013-06-03T19:51:43.173 回答