为什么扩展方法要求声明类是静态的?这是编译器的要求吗?
它在 C# 4 规范的语言规范第 10.6.9 节中规定:
当方法的第一个参数
包括 this 修饰符,即
方法被认为是一个扩展
方法。扩展方法只能是
以非泛型、非嵌套方式声明
静态类。第一个参数为
扩展方法可以没有
除此之外的修饰符,以及
参数类型不能是指针
类型。
我不清楚为什么all这些限制是必要的 - 除了可能的编译器(和语言规范)简单性之外。我可以明白为什么将其限制为非泛型类型是有意义的,但我无法立即明白为什么它们必须是非嵌套的和静态的。我怀疑如果您不必担心当前类型等中包含的类型,它会使查找规则变得相当简单,但我敢说这是可能的。
我怀疑没有这些限制所带来的额外复杂性被认为小于所获得的好处。
编辑:为了清楚起见,我并不是建议将实例方法作为扩展方法是有意义的 - 我建议在嵌套和/或非静态类中使用静态扩展方法是有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)