【问题标题】:How to listen an abstract method?如何监听抽象方法?
【发布时间】:2011-08-19 19:02:12
【问题描述】:

在我的抽象类中,我可以监听一个抽象方法并在调用该方法时触发一个事件吗?如果是怎么办?

【问题讨论】:

    标签: c# events abstract-class


    【解决方案1】:

    无论是否抽象,您都在寻找一种控制反转 (IoC) 框架,特别是一个可以让您进行方法拦截的框架。

    我会查看UnitySpring。还有一些其他的。

    【讨论】:

      【解决方案2】:

      最好的方法如下:

      public abstract class MyClass {
      
          public void DoOuter() {
              FireEvent();
              DoInner();
          }
      
          protected abstract void DoInner();
      }
      

      当有人想要调用 doInner 时,他们必须调用 DoOuter() 才能执行它。要指定功能,请覆盖 DoInner()。所以FireEvent() 总是在指定DoInner() 功能之前被调用...除非它被子类直接调用,你无法真正防范。

      【讨论】:

      • 这实际上是一个C#问题,所以我稍微编辑了答案,但主要思想是正确的。
      • 哦。谢谢,StriplingWarrior。
      【解决方案3】:

      并不是一个抽象方法总是被覆盖,并且不能保证覆盖调用base.Method() 到它的实现。

      最好的办法是创建一个引发事件的虚拟方法,然后让所有覆盖调用base.Method()

      如果你想拦截方法调用,here是一个关于如何做到这一点的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多