【问题标题】:Calling private event handler from outside class从外部类调用私有事件处理程序
【发布时间】:2010-06-17 14:28:56
【问题描述】:

我有两节课。 一个类(比如 A)在 c'tor 中使用一个文本框。并使用私有事件处理程序方法注册 TextChanged 事件。 第二类(比如 B)通过提供一个文本框来创建 A 类的对象。

如何从B类调用A类的私有事件处理器?

它还注册 MouseClick 事件。

有没有办法调用私有事件处理程序?

【问题讨论】:

    标签: c# events private


    【解决方案1】:

    简短回答:不要。

    将您的事件处理程序声明为公共的,或者更好的是,创建一个公共代理方法,例如

    public class MyClass 
    {
      private myHandler....
    
      public returnType DoClick() { return myHandler(...); }  
    }
    

    直接访问私有成员会破坏将其声明为私有的目的。

    【讨论】:

      【解决方案2】:

      创建事件处理程序和其他类都可以调用的公共方法。一般来说,直接调用事件处理程序是个坏主意。仔细考虑你想要做什么,你应该能够找到一个更接近你想要做什么的概念的代码结构。您不希望其他班级单击按钮;你希望你的其他班级做一些点击按钮也会做的事情。

      【讨论】:

      • +1 不错的语义分析。如果所讨论的类不是 UI 组件(页面或控件),则它不应该公开处理程序,而是公开处理程序将调用的方法。
      【解决方案3】:

      使用私有方法订阅和使用私有订阅者触发事件都没有限制。到目前为止,您有任何错误吗?

      【讨论】:

      • 但是A类怎么调用B类的私有方法呢?我想以编程方式引发事件。
      猜你喜欢
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多