方法超载分辨率和Jon Skeet的Brain Teasers

gin*_*boy 23 c# operator-overloading

乔恩的脑筋急转弯

这里是剧透......

我正在看#1 的答案,我必须承认我从来不知道重载决议是这种情况.但为什么这样呢.在我的小脑袋里Derived.Foo(int)似乎是合乎逻辑的道路.

这个设计决定背后的逻辑是什么?

奖金时间!

此行为是C#规范,CLR实现还是编译器的结果?

Eri*_*ert 14

这种行为是经过深思熟虑和精心设计的.原因是因为这种选择减轻了一种形式的脆性基类失效的影响.

阅读有关该主题的文章了解更多详情.

http://blogs.msdn.com/ericlippert/archive/2007/09/04/future-breaking-changes-part-three.aspx

  • @runrunraygun:CLR没有重载决策算法; 重载决议是一种语言概念.CLR IL只有调用特定位置的任何方法引用的指令.所以这不可能是CLR规范.此行为在C#规范部分7.6.5.1中指定,该点开始"将候选方法集合简化为仅包含来自大多数派生类型的方法......" (3认同)