C#重载分辨率?

在文章Anders Hejsberg的采访中 ,“我们在C#中进行重载解析的方式与其他语言不同”有人可以用C#和Java提供一些例子吗?

Anders在这里得到的是,原始设计团队明确设计了重载决策算法,使某些属性与版本控制方案很好地配合,即使这些属性在考虑没有版本控制的情况下看起来倒退或混乱。

可能最常见的例子是C#中的规则,如果更多派生类上的任何方法是适用的候选者,它自动优于较少派生类上的任何方法, 即使派生较少的方法具有更好的签名匹配 。 据我所知,在其他具有重载分辨率的语言中找不到此规则。 这似乎违反直觉; 如果有一种方法是更好的签名匹配,为什么不选择它呢? 原因是因为更好的签名匹配方法可能已在更高版本中添加 ,从而引入了“脆弱基类”故障。

有关各种语言如何处理脆弱的基类失败的更多想法,请参阅

http://blogs.msdn.com/b/ericlippert/archive/tags/brittle+base+classes/

关于重载决策的更多想法,请参阅

http://blogs.msdn.com/b/ericlippert/archive/tags/overload+resolution/

C# 从内部角度处理重载的方式有所不同。

安德斯的完整报价:

我一直把自己描述为一个务实的人。 这很有趣,因为版本控制最终成为我们语言设计的支柱之一。 它显示了如何在C#中覆盖虚拟方法。 此外,由于版本控制的原因,我们在C#中执行重载解析的方式与我所知道的任何其他语言不同。 每当我们考虑设计特定function时,我们总是会对版本控制进行交叉检查。 我们会问,“版本控制如何改变这种情况?从版本控制角度来看,这个function如何?” 事实certificate,之前的大多数语言设计都没有考虑到这一点。