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();
}
}
}
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.
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.
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.
}
}
I’m using a C# 2.0 compiler btw.
Absolutely:
In other words, the EventB subscription/unsubscription code just passes the subscription/unsubscription requests on to EventA.
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.