C# C在另一个方法(在第三方dll中定义)完成后触发一个方法
这可能属于方法扩展、重写或多态性的范畴。我对C和OO还不熟悉,所以请原谅,我还在学习:- 我有一个应用程序,是利用第三方API。在API中,有一种对自定义控件执行右键单击+选择操作的方法。该控件是一个图像查看器,用户可以在其中右键单击并循环到父组中存在的另一个图像 在我有限的理解中,我认为这两件事中的一件将需要发生,无论哪一件是可以做到的,还是哪一件是一个好的解决方案,都是悬而未决的 我不想覆盖现有的方法,我只想以某种方式附加到它。 如果有一种方法可以检测特定事件何时被触发和完成,那么调用我的方法。设置某种类型的侦听器(如果可用)。C# C在另一个方法(在第三方dll中定义)完成后触发一个方法,c#,events,methods,append,C#,Events,Methods,Append,这可能属于方法扩展、重写或多态性的范畴。我对C和OO还不熟悉,所以请原谅,我还在学习:- 我有一个应用程序,是利用第三方API。在API中,有一种对自定义控件执行右键单击+选择操作的方法。该控件是一个图像查看器,用户可以在其中右键单击并循环到父组中存在的另一个图像 在我有限的理解中,我认为这两件事中的一件将需要发生,无论哪一件是可以做到的,还是哪一件是一个好的解决方案,都是悬而未决的 我不想覆盖现有的方法,我只想以某种方式附加到它。 如果有一种方法可以检测特定事件何时被触发和完成,那么调用我的方
谢谢 由于您没有发布任何参考资料,我将尝试概述一些方法 如果有活动
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();
}
}
有一种方法可以重写
public class YourCustomControl : CustomControl
{
public override void Selection()
{
base.Selection(); // first call the original method
// now do some custom stuff
}
}
由于您没有发布任何参考资料,我将尝试概述一些方法 如果有活动
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();
}
}
有一种方法可以重写
public class YourCustomControl : CustomControl
{
public override void Selection()
{
base.Selection(); // first call the original method
// now do some custom stuff
}
}
您不能重写该方法:如果该方法不受保护/虚拟/抽象,或者您不能从该组件的类派生,那么这是正确的。 您可以在组件中搜索事件,并猜测是否没有任何文档说明在所需操作之后触发了哪个事件。并实际执行该事件句柄中的代码 可能还有其他黑客手段,但我个人会避免做类似的事情,如果不是出于个人激情,而是专注于重新构建我的程序,以便尽可能满足需求并支持该组件
关于。您不能重写该方法:如果该方法不受保护/虚拟/抽象,或者您不能从该组件的类派生,则是这样。 您可以在组件中搜索事件,并猜测是否没有任何文档说明在所需操作之后触发了哪个事件。并实际执行该事件句柄中的代码 可能还有其他黑客手段,但我个人会避免做类似的事情,如果不是出于个人激情,而是专注于重新构建我的程序,以便尽可能满足需求并支持该组件
关于。您所描述的是面向方面编程AOP的租户。如果您想插入第三方.NET dll,我建议您使用PostSharp,您所描述的是面向方面编程AOP的租户。如果您想插入第三方.NET dll,我建议您使用PostSharp如果没有事件或虚拟方法的公开验证,这将很困难。你能在你的问题中包括这个对象的接口吗?似乎没有,正如我在下面所说的,我甚至不能在控件上放置我自己的单击事件。如果没有事件或虚拟方法的公共exosure,这将很困难。你能在你的问题中包括这个对象的接口吗?似乎没有,正如我在下面说的,我甚至不能在控件上放置我自己的单击事件。事实证明,我甚至不能访问正在触发的第三方方法。api没有给我事件。事实上,我甚至无法将自己的标准mouseclick事件添加到自定义控件中,因此在这一点上,我似乎遇到了麻烦。事实证明,我甚至无法访问正在触发的第三方方法。api没有给我事件。事实上,我甚至不能将自己的标准mouseclick事件添加到自定义控件中,因此在这一点上,我似乎遇到了麻烦。