c# - 事件+适配器模式

标签 c# adapter

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

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/

相关文章:

c# - 测试委托(delegate)是否平等

c# - 如何在 aspnet.core web api 中验证 JWT token ?

android - ListView 以编程方式突出显示行项目

android - 如何在 GridView 中从数据库中一张一张地加载图像?

java - 如何使用适配器位置将数据从 firebase 检索到新 Activity

android - 调用 setAdapter 后 ArrayList 值消失

c# - 包含子元素集合的配置元素

c# - 将项目转换为 VS 2010 时的命名空间错误

c# - 如何通过聚合根控制不变量

c# - 读取打开的 excel 文件时出现 OleDBException