Muh*_*raz 3 c# linq oop extension-methods interface
因此,扩展方法用于向类添加功能,而无需修改其当前代码。我读到 LINQ 运算符是这样定义的。
我的问题是,当我们知道每个实现 IEnumerable 的类都需要 LINQ 运算符时,为什么不直接在 IEnumerable 接口中定义 LINQ 运算符?为什么要使用扩展方法?
谢谢你。
原因有三点:
更改 IEnumerable 的界面对现有使用者来说是一个重大变化。由于 .NET 3.5(引入 LINQ 时)不是生产中的 .NET 的唯一版本(当时有 .NET 2.0 和 .NET 1.1),因此 Microsoft 的 .NET 团队必须特别小心进行更改。
架构软件的一个基本部分是理解 Object SOLID 设计原则“开闭”原则(SOLID 中的“O”)。也称为组合优于继承。也就是说,当您构建软件时,更喜欢拥有可以协同工作以组成您想要的乐高结果的乐高积木,而不是让乐高积木将所有这些功能都内置到其继承链中。并非每个乐高积木都需要乐高轮的功能,但是如果您使用继承,每个乐高积木都可以访问该功能——可能不是您想要的。
通过使用组合和设置新的扩展方法语法;Microsoft 可以向 Enumerable 接口添加功能,而无需担心 IEnumerable 的现有使用者,并且这些实现中没有一个必须实现整个 LINQ 运算符集,如果将其嵌入到 IEnumerable 接口中,他们将不得不这样做。
IEnumerable并被IEnumerable<T>简单地命名为:为迭代集合的常用方法提供一个接口。这样,需要迭代集合的每个人都可以使用此接口。如果他们开始向该接口添加与枚举无关的内容,消费者将开始感到困惑。“这东西又是为了什么?”
软件开发中的另一个原则是单一职责原则(SOLID 中的 S ),当您有一个负责两个或多个事物的类或接口时,是时候重新审视该接口存在的原因了。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |