扩展方法要求将类声明为静态

时间:2010-04-28 17:20:07

标签: c# c#-3.0

为什么扩展方法要求声明类是静态的?它是编译器要求吗?

1 个答案:

答案 0 :(得分:29)

这取决于C#4规范的第10.6.9节的语言规范:

  

当一个方法的第一个参数   包括this修饰符,即   方法据说是一种扩展   方法。扩展方法只能是   以非泛型,非嵌套方式声明   静态类。第一个参数   扩展方法可以没有   除此之外的修饰语和   参数类型不能是指针   类型。

我不清楚为什么所有这些限制都是必要的 - 除了潜在的编译器(和语言规范)简单性。我可以看出为什么将它限制为非泛型类型是有意义的,但我不能立即明白为什么它们必须是非嵌套和静态的。我怀疑如果您不必担心当前类型中包含的类型等,它会使查找规则变得相当简单,但我敢说它是可能的。

我怀疑没有这些限制的额外复杂性被认为低于获得的利益。

编辑:为了清楚起见,我并不是说将实例方法作为扩展方法是有意义的 - 我建议在嵌套和/或非嵌套方法中使用静态扩展方法是有意义的 - 静态课程。