c# - 如何在 C# 中基于现有委托(delegate)类型创建新的委托(delegate)类型?

标签 c# inheritance delegates

有什么方法可以在现有委托(delegate)类型的基础上创建新的委托(delegate)类型?就我而言,我想创建一个委托(delegate) MyMouseEventDelegate这将具有与 EventHandler<MouseEventArgs> 相同的功能.

我为什么要这个?当然是利用编译时类型检查!这样,我可以有两个不同的委托(delegate):MyRightClickHandlerMyLeftClickHandler , 永远不要混淆这两个 - 即使它们在功能上都与 EventHandler<MouseEventArgs> 相同.

有语法来做这种事吗?

哦,代码如下:

using MyRightClickHandler = EventHandler<MouseEventArgs>

还不够好。它不进行任何类型检查,因为它实际上并没有创建新类型。而且我必须将这样的一行粘贴到我要引用的每个代码文件中 MyRightClickHandler .

最佳答案

好吧,这就像从原始文件中复制委托(delegate)声明一样简单。 C# 中没有任何东西可以自动执行此操作,但我看不出这是一个很大的负担:

public delegate void MyLeftClickHandler(object sender, MouseEventArgs e);
public delegate void MyRightClickHandler(object sender, MouseEventArgs e);

MouseEventHandler 不会很快改变......

您是否真的因为在错误的地方使用错误的委托(delegate)而被错误咬伤?我不记得自己曾经发现过这个问题,在我看来,您正在引入更多工作(以及其他开发人员不熟悉的一组委托(delegate))- 您确定值得吗?

关于c# - 如何在 C# 中基于现有委托(delegate)类型创建新的委托(delegate)类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861835/

相关文章:

c# - 交互触发 wp8.1(silverlight) 时的 xaml 解析错误

c# - 有没有办法简化这个 linq

c++ - 为什么编译器在这种情况下会选择不正确的函数重载?

c# - 使用 WinForms GUI 控件的线程安全事件

iphone - StoreKit SKProducts请求崩溃

c# - 如何在 C# 中获取有关委托(delegate)函数实例的信息(如名称或包含类)?

c# - 对象初始值设定项中的属性可以相互引用吗?

c# - 隐藏/取消隐藏文件效果不佳

java - 从 ArrayList 类继承出现问题, 'receiving non-static method can not be referenced in static context' 错误

Scala "multilevel"抽象类/抽象对象替换