3

我正在尝试习惯WeakEventManager并且偶然发现以下内容:



和之间的唯一区别是,请忽略复制/粘贴错误 ;)ABstaticnameof

我找到了关于泛型和静态类型的答案,但我想知道那WeakEventManager是怎么A回事?不知何故,它可以null作为静态事件的来源。

我正在寻找一个简单的答案,为什么事件可以,static但突然不行。static classTEventSource


代码:

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
'B':静态类型不能用作类型参数

4

1 回答 1

5

WeakEventManager可以处理静态事件,什么时候sourcenull

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

whereStaticSource是静态事件的特殊“事件源”。
这是 的实现细节WeakEventManager,这就是它可以的原因。

关于静态类型作为泛型参数 - 这是语言限制。它与 没有具体关系WeakEventManager

于 2016-04-20T09:39:27.867 回答