【发布时间】:2023-03-09 01:06:01
【问题描述】:
我正在使用一个在 C# 中转发事件的类。我想知道是否有办法做 它需要更少的代码开销。
这是我到目前为止的一个例子。
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。
我要做的是减少 B 类中用于转发事件的代码开销,因为通常 B 类中的事件没有真正的处理。此外,我将有几个不同的事件,因此需要编写一个B 类中的许多 OnEvent() 方法仅用于转发事件。
是否有可能以某种方式自动将 EventA 链接到 EventB,所以我有这样的东西:
class B
{
A m_A = new A();
public event EventType EventB;
public B()
{
m_A.EventA += EventB; // EventA automatically raises EventB.
}
}
顺便说一句,我正在使用 C# 2.0 编译器。
【问题讨论】:
-
很好的问题,特别是因为您不应该忘记取消订阅 EventA,否则可能会出现内存泄漏(您的对象 B 将与 A 一样保留在内存中,即使不再需要它)。
标签: c# events event-handling c#-2.0