gpt4 book ai didi

c# - 事件+适配器模式

转载 作者:行者123 更新时间:2023-11-30 17:19:42 25 4
gpt4 key购买 nike

我在一个通用类上有一个适配器模式,它本质上是在类型之间进行调整:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com