问题描述
我试图在 Int32 和 IntPtr 之间定义一个委托覆盖.为什么以下重载是非法的?
I tried to define a delegate override between Int32 and IntPtr. Why are the following overloads illegal?
public delegate int EnumWindowsCallback (System.IntPtr hWnd, int lParam);
public delegate int EnumWindowsCallback (System.IntPtr hWnd, System.IntPtr lParam);
这看起来很奇怪.它们都是结构,但不同,并从不同的接口实现.
That looks pretty strange. They are both structs but are different and implement from different interfaces.
想一想,我以前从未尝试过重载委托.这是否合法,如果是,为什么?
Come to think of it, I have never tried to overload a delegate before. Is it even legal, and if so, why?
更新:在查看了答案和更多 SO 帖子后,我感到困惑的是,即使使用不同数量的参数也无法声明代表.我仍然想知道为什么不能在运行时解决这个问题.
UPDATE: After going through the answers and some more SO posts, I was baffled that delegates cannot be declared even with a varying number of parameters. I am still wondering why this cannot be resolved at runtime.
推荐答案
想一想,我以前从未尝试过重载委托.这是否合法,如果是,为什么?
Come to think of it, I have never tried to overload a delegate before. Is it even legal, and if so, why?
不,这是不合法的.您当前正在声明两个具有相同完全限定名称的类型.
No, it's not legal. You're currently declaring two types with the same fully-qualified name.
在类型方面看起来唯一有点像重载的是,如果您声明了两个泛型类型参数数量不同的类型.比如Action<T>、Action<T1, T2>等.这里的delegate的规则和其他类型的规则没有区别.
The only thing that looks a bit like overloading when it comes to types is if you declare two types which differ in the number of generic type parameters. For example, Action<T>, Action<T1, T2> etc. The rules for delegates are no different than the rules for other types here.
因此,要么您需要声明一个泛型委托(并使用不同的类型参数),要么使用两个不同的类型名称.
So either you need to declare one generic delegate (and use different type arguments), or use two different type names.
这篇关于我可以定义 2 个名称相同但参数不同的委托吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)