c# - 从封装类传递事件

标签 c# events encapsulation

如果我有一个封装了类 B 实例的类 A,是否可以通过类 A 的实例传递在类 B 中引发的事件?例如:

public classB
{
    ...
    public event EventArgs SomeEvent;
    protected virtual void OnSomeEvent(EventArgs e)
    ...
}

public classA
{
    ...
    private classB = new ClassB();
    ...
}

我希望发生的是类 A 的任何实例也公开 SomeEvent,这样当它被类 B 引发时它也被类 A 引发?

有人可以提供帮助或建议吗?

最佳答案

没有什么比routed events对于简单的类。您应该订阅 ClassB 事件并在 ClassB 引发事件时从 ClassA 引发事件:

public class ClassA
{
    public event EventHandler SomeEvent = (s,e) => { };
    private ClassB classB = new ClassB();

    public ClassA()
    {
       classB.SomeEvent += (s,e) => SomeEvent(this, e);
    }    
}

更经典的方式:

public ClassA
{
    public event EventHandler SomeEvent;
    private ClassB classB = new ClassB();

    public ClassA()
    {
       classB.SomeEvent += ClassB_SomeEvent;
    }

    private void ClassB_SomeEvent(object sender, EventArgs e)
    {
        if (SomeEvent != null)
            SomeEvent(this, e);
    }
}

关于c# - 从封装类传递事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20880851/

相关文章:

c# - 为什么保存了 'in progress' 后测试结果有时还是 'passed'?

c# - 字符串不在正则表达式中

c# - 检测何时注册到属性更改事件

javascript - 在动态创建的字段上捕获 javascript 事件

C# 自动属性来包装私有(private)字段?

c# - 在集合中封装引用类型

c# - Json.Net 反序列化字符串中的 JSON 字符串

c# - 使用 C# 将文本数据文件写入 Excel

JavaScript 错误监听器

C:隐藏静态函数的公共(public)别名