c# - 如果您能够修改源代码,为什么还要使用扩展方法?

标签 c# extension-methods

<分区>

学习扩展方法以书本为例扩展C#中Int32(int关键字)的函数结构(不能继承结构改源码)在 Int32 的情况下,我意识到三件事需要扩展方法:

  1. 如果继承是不可能的,例如密封类;
  2. 在无法更改源代码的情况下;
  3. 如果可以但不希望更改类或结构的源代码。

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


问题:

当我自己描述类并且我可以对其进行更改时,无需使用扩展方法,但为什么在这种情况下我可能需要使用扩展方法,如果我可以只更改我的类中的代码?

也就是说,当我可以更改代码时,我要求你给出一个例子,但这是不可取的和可取的使用扩展方法。

最佳答案

有趣的是,我只是偶然发现了一个可能适用于此的问题。

你想知道的情况

why extend if you can modify the source?

有很多场景,但基线:

如果添加的功能不是类的固有部分,您想扩展

举个例子


假设您有一个 API 客户端。您创建了 C# 代码来使用此客户端。我们称它为 WebClient

现在,假设您在另一个 MVC Web API 应用程序中使用此 WebClient 来获取远程数据。这可以由远程用户 A 调用。

有一个 cass,您最终会遇到这样一种情况,您希望根据 的结果从 MVC Web API 应用程序将特定结果返回给 A >WebClient.

此代码将在整个 MVC Web API 应用程序中使用,因此:考虑 DRY , 你只想写一次。

所以,您没有选择:是否在 WebClient 中。

考虑一下:


由于您选择了该技术,所以存在 MVC Web API 特定功能,但它与 WebClient 的固有属性和功能无关。

这将是扩展的典型用例。

参见:Duplication of code when on WEB Api validation作为我的灵感来源。

关于c# - 如果您能够修改源代码,为什么还要使用扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59598898/

相关文章:

c# - C++/Cx for C# 中的 Directx 包装器

c# - 覆盖 LINQ 扩展方法

c# - 创建通用扩展方法以提供过滤功能

c# - 如何获取 Roslyn 中 NamedTypeSymbol 的所有适用方法,包括扩展方法?

c# - NuGet 包拒绝在 .NET Core 库中卸载

c# - 将新的 XElement 添加到现有的 XElement(如果它不存在)

c# - where 语句在 C# 中无法正常工作

c# - 如何在运行时更改类定义?

c# - 编写具有多种类型的泛型扩展方法时的类型推断问题

c# - 为什么不能直接调用扩展方法?