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

C# 如果扩展方法与密封类中的方法具有相同的签名,那么调用优先级是多少?,c#,c#-3.0,extension-methods,C#,C# 3.0,Extension Methods,我在读C#3.0中的扩展方法。我正在阅读的文本暗示,与被扩展类中的方法具有相同签名的扩展方法将是执行顺序的第二位-也就是说,调用密封类中的方法。如果是这种情况,如何扩展密封类?事实上,实际方法优先于扩展方法。为了说明这一点,“执行顺序”表明两者都可以被称为;只调用原始方法。也许选择另一个名字/签名;如果这是您的意图,那么您不能使用扩展方法来实现monkey patch 如果某个基类/接口(该类型实现的)没有此方法,您可以将其强制转换到那里…?使用另一个方法签名。扩展方法意味着您正在使用新功能扩展

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

事实上,实际方法优先于扩展方法。为了说明这一点,“执行顺序”表明两者都可以被称为;只调用原始方法。也许选择另一个名字/签名;如果这是您的意图,那么您不能使用扩展方法来实现monkey patch


如果某个基类/接口(该类型实现的)没有此方法,您可以将其强制转换到那里…?

使用另一个方法签名。扩展方法意味着您正在使用新功能扩展密封类,而不是覆盖已经实现的功能

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

有关更多详细信息,请参阅以下帖子:

哈哈!猴子补丁…这是一个新的。好的,谢谢,我在想,如果我是对的,它将打破密封,这将挫败使用密封的全部意义。@Scott-也称为鸭子出击。我不骗你,猴子补丁。。。我正在把它添加到我的程序员词汇表中+1如果必须使用相同的签名调用扩展方法,则可以显式地而不是从实例调用它<代码>扩展类.扩展方法(实例)