【问题标题】:Why do we need extension method if inheritance is already there..? [duplicate]如果继承已经存在,为什么我们需要扩展方法......? [复制]
【发布时间】:2016-03-29 14:31:09
【问题描述】:

我在面试中经常遇到这个问题。但我在任何地方都没有得到答案。请帮助我。

【问题讨论】:

  • 密封类呢?
  • 扩展方法是添加到语言中的语法糖,使 Linq 调用看起来像是内置在所有实现 IEnumerable<> 等的类中。也就是说,这是一种让你将方法“添加”到您没有源代码或已密封的类中。

标签: c#


【解决方案1】:

继承和扩展方法是完全正交的。这只是使用熟悉的. 语法在 C# 中编写函数的一种简单方法。仅当您使用继承进行代码重用时,它们才看起来相似,这往往会令人不悦(但请确保您了解为什么 - “最佳”实践是上下文相关的 :))。

无论如何,我希望这个问题能够让你说话。不要过分关注“正确”答案是什么——只需概述根据您的用途使用什么继承,使用什么扩展方法,以及它们各自的优点和缺点。让对话框运行。

例如,对我来说,扩展方法都是关于针对接口创建通用函数。也就是说,这些函数在接口(或类)之上添加功能,同时仅使用其公共接口。这使得函数可用的接口的“大小”要小得多,从而更容易推理。

不同的人以不同的方式使用扩展方法,就像不同的人以不同的方式使用继承一样。然而,我发现当你从继承转向组合时,扩展方法变得越来越有用(而且真的很自然)。继承是一种非常具体的技术,几乎毫无理由地开始用于几乎所有事情,但无论如何这已经是 Programmers.SE 上的一个大话题,就像组合与继承的辩论一样 :))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2017-06-14
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多