【问题标题】:Extension methods require declaring class to be static扩展方法需要声明类是静态的
【发布时间】:2010-04-28 17:20:06
【问题描述】:

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

【问题讨论】:

标签: c# c#-3.0


【解决方案1】:

语言规范中规定,C# 4 规范的第 10.6.9 节:

当方法的第一个参数 包括 this 修饰符,即 方法被称为扩展 方法。扩展方法只能是 在非泛型、非嵌套中声明 静态类。第一个参数 扩展方法可以没有 除此以外的修饰符,以及 参数类型不能是指针 输入。

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

我怀疑没有这些限制所带来的额外复杂性被认为小于获得的好处。

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

【讨论】:

  • @Jon:非静态实现如何工作?调用将使用扩展方法类的哪个实例?
  • 我和亚当在一起,如果它不是静态的,如何确定要调用的具体实例?如果有多个实例,这意味着什么?
  • @Adam:我并不是说非静态方法有意义。我建议非静态 type 有意义。
  • 啊,这确实更有意义。
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2012-11-22
  • 2011-01-01
  • 2012-01-29
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多