在 C# 中转发事件 [英] Forwarding events in C#

查看:30
本文介绍了在 C# 中转发事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用一个在 C# 中转发事件的类.我想知道是否有办法做它需要更少的代码开销.

I'm using a class that forwards events in C#. I was wondering if there's a way of doing it that requires less code overhead.

这是我到目前为止的一个例子.

Here's an example of what I have so far.

class A
{
   public event EventType EventA;
}

class B
{
   A m_A = new A();
   public event EventType EventB;

   public B()
   {
      m_A.EventA += OnEventA;
   }

   public void OnEventA()
   {
      if( EventB )
      {
         EventB();
      }
   }
}

A 类引发了原始事件.B 类将其作为 EventB 转发(本质上是相同的事件).A 类对其他模块是隐藏的,因此它们不能直接订阅 EventA.

Class A raises the original event. Class B forwards it as EventB (which is essentially the same event). Class A is hidden from other modules so they can't subscribe to EventA directly.

我正在尝试做的是减少 B 类中用于转发事件的代码开销,因为通常 B 类中的事件没有真正的处理.此外,我将有几个不同的事件,因此需要编写一个B 类中的许多 OnEvent() 方法仅用于转发事件.

What I'm trying to do is reduce the code overhead in class B for forwarding the event, as typically there's no real handling of the events in class B. Also I'll have several different events so it would require writing a lot of OnEvent() methods in class B that only serve to forward the events.

是否有可能以某种方式自动将 EventA 链接到 EventB,所以我有这样的东西:

Is it possible to automatically link EventA to EventB in some way, so I'd have something like this:

class B
{
   A m_A = new A();
   public event EventType EventB;

   public B()
   {
      m_A.EventA += EventB; // EventA automatically raises EventB.
   }
}

顺便说一句,我正在使用 C# 2.0 编译器.

I'm using a C# 2.0 compiler btw.

推荐答案

绝对:

class B
{
    private A m_a = new A();

    public event EventType EventB
    {
        add { m_a.EventA += value; }
        remove { m_a.EventA -= value; }
    }
}

换句话说,Eve​​ntB 订阅/取消订阅代码只是将订阅/取消订阅请求传递给 EventA.

In other words, the EventB subscription/unsubscription code just passes the subscription/unsubscription requests on to EventA.

请注意,这不允许您为订阅了 EventB 的订阅者引发事件只是.这就像将某人的地址直接传递给大众营销公司,而您原来的方式更像是自己订阅大众营销公司,并允许人们要求您将邮件的副本发送给他们.

Note that this doesn't allow you to raise the event just for subscribers who subscribed to EventB, however. It's like passing someone's address directly onto a mass marketing company, whereas your original way is more like subscribing to the mass marketing company yourself, and allowing people to ask you to send copies of the mails to them.

这篇关于在 C# 中转发事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆