我在泛型类上有一个适配器模式,它本质上在类型之间进行适应:
class A<T> { event EventHandler e; }
class Aadapter<T1, T2> : A<T1> { A<T2> a; Aadapter(A<T2> _a) { a = _a; } }
问题是 A 包含一个事件。我实际上希望分配给适配器的所有事件处理程序都落入 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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)