C#在另一个方法(在第三方dll中定义)完成后触发一个方法

时间:2011-07-22 21:59:37

标签: c# events methods append

这可能属于扩展,覆盖或多态的方法(我是C#和OO的新手,请原谅我,我还在学习:-))。

我有一个使用第三方API的应用。在API中,有一种在自定义控件上进行右键单击+选择操作的方法(该控件是一个图像查看器,用户可以右键单击并循环到父组中存在的另一个图像)。

在我有限的理解中,我认为这两件事中的一件事需要发生(无论是一件事都可以完成,还是其中一件都是好的解决方案!)

  1. 我不想覆盖现有方法,我只是想以某种方式附加它。
  2. 如果有一种方法可以检测到特定事件何时被触发并完成,那么请调用我的方法。如果有可用,请设置某种听众。
  3. 谢谢!

3 个答案:

答案 0 :(得分:1)

由于您没有发布任何参考文献,我将尝试概述一些方法。

  1. 如果有活动

    CustomControl cc = yourCustomControl;
    cc.SelectionCompleted += (sender, args) => { YourMethod() };
    

    这是使用lambda的

    另一种方式是:

    public class Form1 : Form
    {
       public Form1()
       {
          this.cc.SelectionCompleted += HandlerSelectionCompleted;
       }
       public void HandlerSelectionCompleted(object sender, EventArgs e)
       {
          YourCustomMethod();
       }
    }
    
  2. 有一种方法可以覆盖

    public class YourCustomControl : CustomControl
    {
       public override void Selection()
       {
          base.Selection(); // first call the original method
    
          // now do some custom stuff
       }
    }
    

答案 1 :(得分:0)

你不能覆盖那个方法:这是正确的,如果它不受保护/虚拟/抽象,或者你不能从该组件的类派生。 您可以在组件中搜索事件并猜测(如果没有任何文档)在您执行所需操作后触发了哪个事件。并实际执行该事件句柄中的代码。

可能还有其他“黑客”伎俩,但我个人会避免做类似的事情,如果不是为了个人的激情,而是专注于覆盖我的程序,以满足要求和支持该组件,尽可能多我可以。

问候。

答案 2 :(得分:0)

您所描述的是面向方面编程AOP的租户。如果你想要第三方.NET dll,我会推荐PostSharp http://www.sharpcrafters.com/solutions/logging