如果扩展方法与密封类中的方法具有相同的签名,那么调用优先级是什么?

Sco*_*ies 14 c# extension-methods c#-3.0

我正在阅读C#3.0中的扩展方法.我正在阅读的文本暗示,与正在扩展的类中的方法具有相同签名的扩展方法将按执行顺序排在第二位 - 也就是说,密封类中的方法被调用.如果是这种情况,你怎么能延长密封班?

Mar*_*ell 13

实际上,实际方法优先于扩展方法.而且要说清楚 - "执行顺序"表明两者都可能被称为; 只会调用原始方法.也许选择另一个名字/签名; 如果这是你的意图,你不能使用扩展方法进行猴子补丁.

如果有一些没有这种方法的基类/接口(类型实现),你可以把它投到那里......?

  • 哈哈!猴子补丁……这是一个新的。好的,谢谢,我在想,如果我是对的,它会破坏密封,这将破坏使用密封的全部意义。 (2认同)

Len*_*rri 6

使用其他方法签名.扩展方法意味着您使用新功能扩展密封类,而不是覆盖已实现的类.

扩展方法具有"隐藏名称"语义,类型上具有实例成员.这意味着类型上的任何可访问实例成员将始终使用相同名称隐藏任何扩展方法,即使扩展方法更适合.因此,如果实例成员被添加到与扩展方法同名的类型,则可以使扩展方法不可调用.

有关详细信息,请查看此文章: 扩展方法最佳实践(扩展方法第6部分)