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

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

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

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

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

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

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