为了账号安全,请及时绑定邮箱和手机立即绑定

为什么扩展方法只允许在非嵌套,非通用静态类中使用?

为什么扩展方法只允许在非嵌套,非通用静态类中使用?

C#
互换的青春 2019-11-19 09:39:15
为什么扩展方法只允许在非嵌套,非通用静态类中使用?在嵌套的通用静态类中考虑扩展方法是否没有用?
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

为什么扩展方法只允许在非嵌套,非通用静态类中使用?

作为PRATIK指出,这个问题我们面对的不是“为什么扩展方法不能嵌套或泛型类允许吗?” 我们所面临语言设计者的问题是“为什么扩展方法在嵌套或泛型类被允许?”

除非该功能因某些现实世界的用户需求而合理,否则我们将不会承担设计,实施,测试,记录和维护该功能的巨额成本。

基本上,设计扩展方法是为了使LINQ正常工作。任何对使LINQ正常工作没有贡献的东西都被削减了。LINQ仅需要静态,非通用,非嵌套类中的扩展方法即可工作,因此这就是我们设计和实现的。

如果您有一个扩展方法在非静态,通用或嵌套类中有用的场景,那么我很乐意看一下该场景。我们获得的现实场景越多,我们很有可能会以某种未来的假设语言来制作功能,从而使这些场景受益。

在嵌套的通用静态类中考虑扩展方法是否没有用?

不,考虑一下是一个好主意。如果我们不考虑这一点,我们将被辞职。我们经过长时间的仔细考虑,并决定基于此考虑,使用该功能所产生的收益并不能证明其功能的合理性。


查看完整回答
反对 回复 2019-11-19
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

正如埃里克·利珀特(Eric Lippert)在其博客中多次写过的那样,对C#的每次更改都是根据一组标准进行仔细评估的,以证明其合理性,而并非仅基于技术缘故。在这种情况下,切断启用LINQ不需要的内容以降低风险。有关类似问题,请查看Eric的这篇博客文章。


查看完整回答
反对 回复 2019-11-19
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我相信这样做是为了使编译器可以在合理的时间内找到/搜索扩展方法。此外,请注意,仅在文件范围内的一组命名空间中,编译器才可以搜索扩展方法-出于类似的原因,这样做也是如此。

如果考虑通用静态类方案,则编译器必须尝试为所有可能的类型组合实例化具体类型,以匹配扩展方法。即使Complier在执行此操作时很聪明,为调用扩展方法实例化具体类型也可能具有开发人员可能不知道的副作用。


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 378 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信