为什么扩展方法只能在静态类中定义?

时间:2013-10-05 16:35:44

标签: c# extension-methods language-design

我的意思是,无论如何,我很确定这是一个好习惯,但有没有任何技术/概念上的原因,为什么编译器强制执行此操作?或者它只是强制美学?

2 个答案:

答案 0 :(得分:1)

在C#层下面没有这种行为的原因。从IL层扩展方法和静态类开始不存在(除了不重要的更改或自定义属性)。

这是语言设计者所做出的选择,据说是为了清晰度。出于任何根本原因,它不一定是这种方式。

还有其他类似的限制。例如,您不能在嵌套类中定义扩展名。

答案 1 :(得分:1)

据我了解,这是一个概念性举措。

静态类的作用类似于方法的纯容器,本身不代表对象,扩展方法本身就是方法只处理输入,并且不像对象行为的一部分那样。

这就是为什么我认为它们在C#中的性质非常相似,这可能就是为什么它们通过语言链接在一起的原因。