我正在阅读关于C#3.0中的扩展方法。我正在阅读的文本意味着,与被扩展的类中的方法具有相同签名的扩展方法在执行顺序上是第二个 - 也就是说,密封类中的方法被调用。如果是这样的话,你怎么能延长密封课程?如果扩展方法与密封类中的方法具有相同的签名,那么调用优先级是什么?
13
A
回答
13
事实上,实际方法优先于扩展方法。只是要说清楚 - “执行顺序”表明两者都可能被称为; 只有原始方法将被调用。也许选择另一个名字/签名;如果这是您的意图,则不能使用扩展方法进行猴子修补。
如果有一些基类/接口(类型实现)没有有这种方法,你也许可以把它转换到那里......?
5
使用另一个方法签名。扩展方法意味着您要使用新功能扩展密封类,而不是覆盖已经实现的类。
扩展方法在类型上具有实例成员的“隐藏名称”语义。这意味着即使扩展方法更合适,任何可访问的类型实例成员也会始终使用相同名称映射任何扩展方法。因此,如果将实例成员添加到与扩展方法相同名称的类型中,则可以使该扩展方法不可渲染。
有关详细信息,看看这个帖子: Extension Methods Best Practices (Extension Methods Part 6)
相关问题
- 1. 扩展使用类别具有相同方法的类名
- 2. 什么是在.NET 1.1中扩展密封类的干净/直观的方法?
- 3. 什么是扩展方法?
- 4. C#扩展方法优先
- 5. 与其类具有相同名称的方法是做什么的?
- 6. 我应该用什么方法来设置调度优先级?
- 7. 为什么在JavaScript中存在具有相同名称的全局方法时总是调用私有方法?
- 8. C#中有什么方法可以用扩展方法覆盖类方法吗?
- 9. 处理$优先级的angularfire方法是什么?
- 10. 扩展Node.addEventListener方法具有相同的名称
- 11. 什么名字2种方法用相同的签名
- 12. 具有相同签名的动态地调用方法
- 13. 为什么Stream.CopyTo不是扩展方法?
- 14. AjaxControlToolkit - 扩展 - 什么是“当前”方法?
- 15. 作为扩展类在父级中使用相同的方法名问题
- 16. Java - 为什么System和Runtime类具有相同的方法?
- 17. 如果我有义务使用与物理列相同的名称,那么ColumnMappings的用法是什么?
- 18. Objective-C类和.NET扩展方法有什么不同?
- 19. CSS中的标记可以具有多级继承,如果不是,那么是否有类似的方法?
- 20. JRuby:扩展具有相同名称的两种方法的Java类
- 21. 类的静态方法具有相同签名的接口默认方法
- 22. 扩展方法编译优先
- 23. 在java中扩展类funcionality的最佳方法是什么?
- 24. 方法链相比普通的命令式方法调用有什么优势?
- 25. PHP类扩展 - 具有相同名称的属性/方法好吗?
- 26. 相似的扩展方法 - 有什么区别吗?
- 27. 在具体类中调用代理方法的正确方法是什么?
- 28. 什么是扩展HttpWebRequest类的Lib的最佳方法?
- 29. 类和扩展方法容器类在相同的命名空间中。有什么好处?
- 30. Vue.js“扩展”用法的正确方法是什么?
哈哈!猴子补丁...这是一个新的。好的,谢谢,我在想,如果我是正确的,它会被破坏密封,并会打败使用密封的整个点。 – 2010-02-23 18:41:57
@Scott - 也被称为鸭子打孔。我没有骗你。 – 2010-02-23 19:24:18