2013-10-05 93 views
1

我的意思是,我很肯定它无论如何都是一个好习惯,但是有没有任何技术/概念上的原因,为什么这是编译器强制执行的?还是仅仅强调美学?为什么只能在静态类中定义暴露方法?

+2

可能的重复http://stackoverflow.com/questions/3930335/why-are-extension-methods-only-allowed-in-non-nested-non-generic-static-class?lq=1 http:///stackoverflow.com/questions/2618271/why-is-it-impossible-to-declare-extension-methods-in-a-generic-static-class?lq=1 http://stackoverflow.com/questions/2731695/extension-method-requires-class-to-be-static?lq = 1 – MichaC

+0

也许它会加快在编译器中搜索扩展方法的速度,因为它需要看的更少。但是我不确定标记带有属性的类不会更好,或者它实际上很重要(在从索引缓存中读取之后,您只需要走一次) – CodesInChaos

回答

1

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

这是语言设计者所做的选择,据说为了代码清晰。根本原因不一定是这样。

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

1

我的理解是这是一个概念性的举动。

静态类的作用类似于方法纯容器和本身不表示对象,并且通过自身的扩展方法是方法仅处理输入并且不作用类似部分对象的行为。

这就是为什么我认为他们在C#中的本质非常相似,可能这就是为什么他们通过语言连接在一起。

相关问题