我正在尝试习惯WeakEventManager
而我偶然发现:
A
和B
之间的仅差异为static
,请忽略nameof
的复制/粘贴错误;)
我找到了关于泛型和静态类型的this answer,但我想知道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) => { });
}
}
错误:
错误CS0718
&#39; B&#39;:静态类型不能用作类型参数
答案 0 :(得分:3)
WeakEventManager
为null时, source
可以处理静态事件:
object sourceKey = (source != null) ? source : StaticSource;
其中StaticSource
是一个特殊的&#34;事件来源&#34;对于静态事件。
这是WeakEventManager
的实施细节,以及它为何可以。
关于静态类型作为通用参数 - 这是语言限制。它与WeakEventManager
具体无关。