【发布时间】:2010-06-17 14:28:56
【问题描述】:
我有两节课。 一个类(比如 A)在 c'tor 中使用一个文本框。并使用私有事件处理程序方法注册 TextChanged 事件。 第二类(比如 B)通过提供一个文本框来创建 A 类的对象。
如何从B类调用A类的私有事件处理器?
它还注册 MouseClick 事件。
有没有办法调用私有事件处理程序?
【问题讨论】:
我有两节课。 一个类(比如 A)在 c'tor 中使用一个文本框。并使用私有事件处理程序方法注册 TextChanged 事件。 第二类(比如 B)通过提供一个文本框来创建 A 类的对象。
如何从B类调用A类的私有事件处理器?
它还注册 MouseClick 事件。
有没有办法调用私有事件处理程序?
【问题讨论】:
简短回答:不要。
将您的事件处理程序声明为公共的,或者更好的是,创建一个公共代理方法,例如
public class MyClass
{
private myHandler....
public returnType DoClick() { return myHandler(...); }
}
直接访问私有成员会破坏将其声明为私有的目的。
【讨论】:
创建事件处理程序和其他类都可以调用的公共方法。一般来说,直接调用事件处理程序是个坏主意。仔细考虑你想要做什么,你应该能够找到一个更接近你想要做什么的概念的代码结构。您不希望其他班级单击按钮;你希望你的其他班级做一些点击按钮也会做的事情。
【讨论】:
使用私有方法订阅和使用私有订阅者触发事件都没有限制。到目前为止,您有任何错误吗?
【讨论】: