WeakEventManager和静态事件

时间:2016-04-20 09:20:36

标签: c# generics weakeventmanager

我正在尝试习惯WeakEventManager而我偶然发现:

AB之间的差异为static,请忽略nameof的复制/粘贴错误;)

我找到了关于泛型和静态类型的this answer,但我想知道WeakEventManagerA做了什么呢?不知何故,它可以与null一起用作静态事件的来源。

我正在寻找一个简单的答案,为什么static事件是正常的,但static class突然不是TEventSource

代码:

public class A
{
    public static event EventHandler Event;
}

public static class B
{
    public static event EventHandler Event;
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        WeakEventManager<A, EventArgs>.AddHandler(null, nameof(A.Event), (s, e) => { });
        WeakEventManager<B, EventArgs>.AddHandler(null, nameof(B.Event), (s, e) => { });
    }
}

错误:

  

错误CS0718
&#39; B&#39;:静态类型不能用作类型参数

1 个答案:

答案 0 :(得分:3)

WeakEventManagernull时,

source可以处理静态事件:

object sourceKey = (source != null) ? source : StaticSource;

其中StaticSource是一个特殊的&#34;事件来源&#34;对于静态事件。
这是WeakEventManager的实施细节,以及它为何可以。

关于静态类型作为通用参数 - 这是语言限制。它与WeakEventManager具体无关。