为什么扩展方法要求声明类是静态的?这是否是编译器的要求?
在C# 4规范的第10.6.9节中明确规定:
如果方法的第一个参数包含this修饰符,则该方法被称为扩展方法。 扩展方法只能声明在非泛型、非嵌套的静态类中。 扩展方法的第一个参数除了this修饰符外,不能有其他修饰符,并且参数类型不能是指针类型。
我不清楚为什么需要所有这些限制,除了可能是为了编译器(和语言规范)的简单性。 我可以理解将其限制为非泛型类型是有意义的,但我不能立即看出为什么它们必须是非嵌套和静态的。 我认为,如果您不必担心当前类型中包含的类型等,那么查找规则会变得更加简单,但我敢说这是可能的。
我怀疑,没有这些限制所带来额外的复杂性被认为比获得的好处要小。
编辑:仅此说明,我并不是建议将实例方法作为扩展方法 - 我建议在嵌套和/或非静态类中具有静态扩展方法是有意义的。