gpt4 book ai didi

c# - 为什么扩展方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:26 26 4
gpt4 key购买 nike

许多 BCL 类都有方法和扩展方法。当 Microsoft 拥有其类的源代码时,选择 ExtensionMethods 而不是 Methods 的设计决定是什么?谢谢你,史密斯

最佳答案

实际上,BCL 中的大多数扩展方法并不适用于类,而是适用于接口(interface),这是扩展方法的关键功能。

例如,几乎所有的 LINQ to objects 都是作为 IEnumerable<T> 的扩展实现的。接口(interface),而不是类 List<T>, HashSet<T>

因为接口(interface)没有功能(只是一种契约),所以向接口(interface)添加扩展方法可以让您找到接口(interface)本身。当实现只需要知道其使用的接口(interface)而不是实现细节(本身)时,这尤其方便。

Microsoft 确实一直在他们的 BCL 类中添加新方法(当然他们会尽可能避免破坏性更改)。但我相信他们在 BCL 中使用的大部分扩展方法都是在接口(interface)上使用的,而不是用于添加可以通过新方法轻松直接添加到类/结构的功能。

因此,简而言之,当 Microsoft 选择向单个 class 添加功能时(或具有公共(public)基类的系列),他们可能只是直接添加方法(所有条件都相同),但如果他们想将新方法应用于给定接口(interface)的所有实现,他们可能会使用扩展该接口(interface)上的方法。

还要记住这一点!因为 Microsoft 为我们提供了扩展方法,所以它也适用于他们没有创建的类!例如,您创建的任何实现 IEnumerable<T> 的类获得 LINQ 的功能以及奖励,即使您没有继承公共(public)基类等。

关于c# - 为什么扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com