一尘不染

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

c#

这个问题中我知道扩展方法只能在类实例上运行,而不能在静态类本身上运行。这意味着我无法扩展像Convert和这样的有用的静态类Math

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

例如,这是为什么没有针对的内置LINQ
扩展的背后原理ForEach<T>``IEnumerable<T>


阅读 222

收藏
2020-05-19

共1个答案

一尘不染

C#团队可能已经实现了这种功能。有什么哲学原因为什么不支持它?

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

特别是,所提出的功能对LINQ无效。添加了扩展方法以使LINQ正常工作。不能使LINQ正常工作的任何东西都很难进入C#3.0。我们按计划进行了很多工作,花了很多时间。(令我惊讶的是自动属性。)在设计之前就剪掉不必要的功能可以节省很多时间和精力,而其他功能事情
使LINQ的工作。

简而言之:建议的功能从未达到过我们获得净收益超过成本的标准,而且我们一直拥有更重要的功能来花费有限的时间和精力。

2020-05-19