重载 += 事件运算符

Posted

技术标签:

【中文标题】重载 += 事件运算符【英文标题】:Overload the += event operator 【发布时间】:2010-11-11 01:25:45 【问题描述】:

有没有办法在 C# 中重载事件 += 和 -= 运算符?我想要做的是获取一个事件侦听器并将其注册到不同的事件。所以是这样的:

SomeEvent += new Event(EventMethod);

那么它实际上不是附加到 SomeEvent,而是附加到不同的事件:

DifferentEvent += (the listener above);
AnotherDiffEvent += (the listener above);

谢谢

【问题讨论】:

【参考方案1】:

这并不是真正的超载,但你可以这样做:

public event MyDelegate SomeEvent

    add
    
        DifferentEvent += value;
        AnotherDiffEvent += value;
    
    remove
    
        DifferentEvent -= value;
        AnotherDiffEvent-= value;
    

更多信息请访问switchonthecode.com

【讨论】:

【参考方案2】:

您可以在 C# 中使用 custom event accessors 执行此操作。

public EventHandler DiffEvent;
public EventHandler AnotherDiffEvent;

public event EventHandler SomeEvent

    add
    
        DiffEvent += value;
        AnotherDiffEvent += value;
    
    remove
    
        DiffEvent -= value;
        AnotherDiffEvent -= value;
    

这意味着您可以简单地调用SomeEvent += new EventHandler(Foo)SomeEvent -= new EventHandler(Foo),相应的事件处理程序将被自动添加/删除。

【讨论】:

【参考方案3】:

您可以使用 + 和 - 运算符组合委托

见How to: Combine Delegates (Multicast Delegates)(C# Programming Guide)

【讨论】:

【参考方案4】:

如果你只是想摆脱一些打字,你可以这样做

SomeEvent += MyMethod;

【讨论】:

以上是关于重载 += 事件运算符的主要内容,如果未能解决你的问题,请参考以下文章

java四则运算

201611151200

多态性与虚函数

C#中形态各异的class

c++中的虚函数有啥作用?

JavaScript小技能:运算符