首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写扩展方法

重写扩展方法
EN

Stack Overflow用户
提问于 2009-01-23 19:05:50
回答 9查看 10.6K关注 0票数 24

我一直在考虑使用扩展方法来替代抽象基类。扩展方法可以提供默认功能,并且可以通过将具有相同签名的方法放在派生类中来“覆盖”。

我有什么理由不这么做吗?

另外,如果我有两个具有相同签名的扩展方法,使用哪一个?有没有建立优先级的方法?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-01-23 19:16:12

我同意迈克尔的观点。基类应该包含所有的基本功能扩展方法,显然,应该扩展基本功能。在像Ruby这样的动态语言中,通常使用扩展方法来提供附加功能,而不是使用子类。基本上,扩展方法是用子类代替的,而不是用基类代替的。

我见过的唯一例外是,如果您有多个具有不同类层次结构的类型(如winform控件),您可以为每个类型创建一个子类,所有这些类型都实现和接口,然后扩展该接口,从而为一组不同的控件提供“基本”功能,而无需扩展像Control或Object这样的所有内容。

编辑:回答你的第二个问题

我想编译器会帮你捕捉到这一点。

票数 3
EN

Stack Overflow用户

发布于 2009-01-23 19:07:52

一般来说,你不应该通过扩展方法来提供“基础”功能。它们只能用来“扩展”类的功能。如果您可以访问基类代码,并且您尝试实现的功能在逻辑上是继承继承的一部分,那么您应该将其放在抽象类中。

我的意思是,你可以并不意味着你应该这样做。当普通的老式OO编程不能为您提供合理的解决方案时,最好还是坚持使用好的老式OOP,并使用新的语言特性。

票数 12
EN

Stack Overflow用户

发布于 2009-01-23 19:40:05

这绝对是个坏主意。扩展方法是静态绑定的,这意味着,除非您在编译时类型为子类型的对象上调用重写,否则仍将继续调用扩展方法。再见多态。This page很好地讨论了扩展方法的危险。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/474074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档