WeakEventManager 和静态事件

WeakEventManager and static event

我正在努力适应 WeakEventManager,但我遇到了以下问题:



AB只有的区别是static,请忽略copy/paste与[=15=的错误] ;)

我发现this answer regarding generics and static types, but I wonder what WeakEventManager是干什么用A呢?它可以以某种方式将 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) => { });
    }
}

错误:

Error CS0718
'B': static types cannot be used as type arguments

WeakEventManager可以处理静态事件,当sourcenull:

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

其中 StaticSource 是静态事件的特殊 "event source"。
这是 WeakEventManager 的实现细节,这就是它没问题的原因。

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

无关