c# - 为什么不支持 C# 静态类扩展方法?

标签 c# linq language-design

我从this question知道扩展方法只能对类实例进行操作,而不能对静态类本身进行操作。这意味着我无法扩展有用的静态类,如 ConvertMath .

我想知道的是,为什么会这样?从上面的链接中,有一些关于 C# 团队如何实现这种功能的建议。为什么不支持它有一些哲学上的原因吗?

例如,这里有一个 rationale为什么后面没有内置LINQ ForEach<T> IEnumerable<T> 的扩展名.

最佳答案

the C# team could have implemented this kind of functionality. Is there some philosophical reason why it isn't supported?

没有技术原因,也没有哲学原因。然而,正如我经常指出的那样,我不必为做某项功能提供理由。功能并不便宜;它们非常昂贵,而且他们不仅必须证明自己的成本是合理的,他们还必须证明不做我们本可以用该预算完成的数百个其他功能的机会成本是合理的。我们必须向我们的利益相关者证明功能的成本是合理的,但我们不需要通过实现不符合我们标准的功能来证明节省时间和精力是合理的。

特别是,提议的功能对 LINQ 没有任何作用;添加了扩展方法以使 LINQ 工作。任何不能使 LINQ 工作的东西都很难进入 C# 3.0;我们在日程表上有很多工作,但没有太多时间去做。(我很惊讶自动属性能做到这一点。)甚至在设计之前削减一个不必要的功能可以节省很多时间和精力,而这些时间和精力是花在其他方面的的事情使 LINQ 工作。

简而言之:建议的功能从未达到我们净 yield 超过成本的标准,而且我们总是有更重要的功能可以花费我们有限的时间和精力。

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

相关文章:

c# - 通过 gmail SMTP 服务器 (SSL) 发送电子邮件

c# - Fluent NHibernate - 映射 CultureInfo 对象?

c# - 如何将函数应用于 IQueryable 实例?

c# - Linq to Entities 在另一个表中为 EXISTS 查找添加 Where 子句

c# - 在 C# 中使用 LINQ 反转字典

ruby - 为什么 Haskell 没有符号(像 ruby​​)/原子(像 erlang)?

scala - Scala 符号的目的?

c# - 使用 ForEach lambda 修改列表中的元素

c# - 为什么 Java 没有像 C# 这样的自动属性?

c# - 使用 HtmlAgilityPack 进行 XML 解析