Sha*_*mer 17 c# inheritance delegates
有没有办法可以根据现有的委托类型创建新的委托类型?就我而言,我想创建一个MyMouseEventDelegate具有相同功能的委托EventHandler<MouseEventArgs>.
我为什么要这个?当然,要利用编译时类型检查!通过这种方式,我可以拥有两个不同的代表:MyRightClickHandler并且MyLeftClickHandler,并且永远不会混淆twain - 即使它们在功能上都相同EventHandler<MouseEventArgs>.
是否有语法来做这种事情?
哦,代码如下:
using MyRightClickHandler = EventHandler<MouseEventArgs>
Run Code Online (Sandbox Code Playgroud)
不够好.它不进行任何类型检查,因为它实际上不会创建新类型.而且我必须将这样一行粘贴到我要引用的每个代码文件中MyRightClickHandler.
Jon*_*eet 15
好吧,就像从原始复制委托声明一样简单.C#中没有任何东西可以自动执行此操作,但我看不出它是一个很大的负担:
public delegate void MyLeftClickHandler(object sender, MouseEventArgs e);
public delegate void MyRightClickHandler(object sender, MouseEventArgs e);
Run Code Online (Sandbox Code Playgroud)
这不会MouseEventHandler很快就会改变......
你是否因为在错误的地方使用错误的代表而被误咬了?我不记得曾经自己发现过这个问题,而且在我看来你正在引入更多的工作(以及其他开发人员的一组不熟悉的代表) - 你确定它值得吗?
我只想实现编译时类型检查我想这对于你描述的案例创建专门的EventArgs类就足够了.这样您仍然可以利用预定义的委托:
class RightMouseButtonEventArgs : MouseEventArgs {}
class LeftMouseButtonEventArgs : MouseEventArgs {}
EventHandler<RightMouseButtonEventArgs>
EventHandler<LeftMouseButtonEventArgs>
Run Code Online (Sandbox Code Playgroud)