【发布时间】:2010-04-28 17:20:06
【问题描述】:
为什么扩展方法要求声明类是静态的?这是编译器的要求吗?
【问题讨论】:
为什么扩展方法要求声明类是静态的?这是编译器的要求吗?
【问题讨论】:
语言规范中规定,C# 4 规范的第 10.6.9 节:
当方法的第一个参数 包括 this 修饰符,即 方法被称为扩展 方法。扩展方法只能是 在非泛型、非嵌套中声明 静态类。第一个参数 扩展方法可以没有 除此以外的修饰符,以及 参数类型不能是指针 输入。
我不清楚为什么所有这些限制都是必要的——除了可能是为了编译器(和语言规范)的简单性。我可以理解为什么将其限制为非泛型类型是有意义的,但我不能立即明白为什么它们必须是非嵌套的和静态的。如果您不必担心当前类型等中包含的类型,我怀疑它会使查找规则变得相当简单,但我敢说这是可能的。
我怀疑没有这些限制所带来的额外复杂性被认为小于获得的好处。
编辑:为了清楚起见,我并不是说将实例方法作为扩展方法有意义 - 我建议在嵌套和/或非嵌套中使用静态扩展方法是有意义的-静态类。
【讨论】: