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

时间:2010-02-20 21:51:41

标签: c# c#-3.0 extension-methods

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:6)

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

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

有关详细信息,请查看此帖子: Extension Methods Best Practices (Extension Methods Part 6)