我在一个通用类上有一个适配器模式,它本质上是在类型之间进行调整:
class A<T> { event EventHandler e; }
class Aadapter<T1, T2> : A<T1> { A<T2> a; Aadapter(A<T2> _a) { a = _a; } }
问题是 A 包含一个事件。我实际上希望分配给 Adapter 的所有事件处理程序都落入 a.
如果我可以将 a 的事件处理程序分配给适配器的事件处理程序,那就太棒了,但这不可能吗?
这里的想法是,A 几乎就是 A,但我们需要一种方法来调整它们。由于事件的工作方式,除了手动添加两个事件处理程序并在调用它们时将它们“中继”到另一个事件之外,我无法有效地完成它。虽然这不是很漂亮,但如果我能有类似的东西看起来会好得多
class A<T> { event EventHandler e; }
class Aadapter<T1, T2> : A<T1> { event *e; A<T2> a; Aadapter(A<T2> _a) { a = _a; e = a.e; } }
从某种意义上说,我们有一个指向事件的指针,我们可以将 a2 的事件分配给该事件。
我怀疑是否有任何简单的方法,但也许有人有一些想法让它发挥作用。
(顺便说一句,我知道这对于虚拟事件是可能的,但我想尽可能避免这种情况)
最佳答案
我认为这就是您所追求的:
class A<T>
{
public virtual event EventHandler e;
}
class Aadapter<T1, T2> : A<T1>
{
A<T2> a;
Aadapter(A<T2> _a) { a = _a; }
public override event EventHandler e
{
add { a.e += value; }
remove { a.e -= value; }
}
}
或者链接起来
class A<T>
{
public event EventHandler e;
protected void ChainEvent(object sender, EventArgs eventArgs)
{
e(sender, eventArgs);
}
}
class Aadapter<T1, T2> : A<T1>
{
A<T2> a;
Aadapter(A<T2> _a)
{
a = _a;
a.e += ChainEvent;
}
}
关于c# - 事件+适配器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676437/