如果能修改源代码,为什么要使用扩展方法?

3

使用书籍作为扩展方法的示例研究扩展方法,以扩展C#中Int32int关键字)的功能结构(在Int32的情况下我们无法继承结构并更改源代码),我意识到扩展方法需要处理以下三个问题:

  1. 当类是密封的时,无法进行继承;
  2. 无法更改源代码的情况下;
  3. 如果有可能更改类或结构的源代码,但不想这么做。

我想知道第三种情况的典型例子是什么。


问题:

当我自己描述类并且可以对其进行更改时,若不使用扩展方法,那么为何在此情况下我可能需要使用扩展方法,而不是直接在类中更改代码?

也就是说,我要求你给出一个例子,即使我可以更改代码,但在某些情况下使用扩展方法更可取。


1
这个回答解决了你的问题吗?何时使用扩展方法,扩展方法与继承的比较? - panoskarajohn
我再次怀疑这是一个重复问题;OP提出了一个非常特定的情况,而重复问题则涉及一般情况,没有答案解决这个具体场景。更重要的是,OP已经在这里给出了一般情况的答案,但想要了解更深入的关于特定情况的信息;@HenkHolterman。 - Stefan
1个回答

1

有趣的是,我刚刚偶然看到了一个可能与此相关的问题。

你在想

为什么要扩展而不是修改源代码?

有很多情况,但基本原则是:

如果添加的功能不是类的固有部分,则应该扩展

我会给你举个例子。


假设您有一个API客户端。您创建了C#代码来使用此客户端。让我们称之为WebClient
现在,假设您在另一个MVC Web API应用程序中使用此WebClient来获取远程数据。这可以由远程用户A调用。
存在一种情况,您将以基于WebClient结果的特定结果返回给A,从您的MVC Web API应用程序中。
此代码将在整个MVC Web API应用程序中使用,因此:考虑到DRY,您希望只编写一次。
所以,现在您有选择:在WebClient中还是不在其中。
考虑这个:
MVC Web API 特定功能是由您选择该技术而引入的,但与 WebClient 的固有属性和功能无关。
这将是扩展的典型用例。
参见: WEB Api 验证时代码重复,这是我的灵感来源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接