【发布时间】:2009-11-28 23:11:38
【问题描述】:
我有一个类,它有一个成员对象(类变量)。这个对象有一些事件。我想直接在我的课堂上公开这些事件。最好的方法是什么?
【问题讨论】:
标签: c# .net design-patterns events
我有一个类,它有一个成员对象(类变量)。这个对象有一些事件。我想直接在我的课堂上公开这些事件。最好的方法是什么?
【问题讨论】:
标签: c# .net design-patterns events
如果您想直接公开事件(不定义要转发给订阅者的新处理程序),您可以这样做:
class MyClass {
private readonly OtherClass other = new OtherClass();
public event EventHandler Click {
add { other.Click += value; }
remove { other.Click -= value; }
}
}
这种方法的优点是您不需要处理来自 OtherClass 的事件并将它们作为您自己的转发。缺点(以及我将“其他”字段声明为只读的原因)是任何连接到 MyClass 的 Click 事件的人实际上是在间接连接到 OtherClass 的 Click 事件。因此,您不会只想更改另一个实例,因为不会调用已经在处理该事件的订阅者。
【讨论】:
sender 参数。如果您有意不以其他方式暴露内部对象,则它可能是封装破坏者。