我的意思是,我很肯定它无论如何都是一个好习惯,但是有没有任何技术/概念上的原因,为什么这是编译器强制执行的?还是仅仅强调美学?为什么只能在静态类中定义暴露方法?
1
A
回答
1
C#图层下面没有任何原因导致此行为。从IL层扩展方法和静态类开始不存在(除了不重要的更改或自定义属性外)。
这是语言设计者所做的选择,据说为了代码清晰。根本原因不一定是这样。
还有其他类似的限制。例如,你不能在嵌套类中定义扩展。
1
我的理解是这是一个概念性的举动。
静态类的作用类似于方法纯容器和本身不表示对象,并且通过自身的扩展方法是方法仅处理输入并且不作用类似部分对象的行为。
这就是为什么我认为他们在C#中的本质非常相似,可能这就是为什么他们通过语言连接在一起。
相关问题
- 1. 在iOS静态库中暴露方法
- 2. 从静态库中暴露一个类
- 3. 禁止类暴露方法
- 4. 为什么静态类只能有静态成员?
- 5. 为什么@decorator不能装饰静态方法或类方法?
- 6. createOperate方法不能被声明为静态;静态方法只能在静态或顶级类型中声明
- 7. C# - 在普通类中暴露静态类?
- 8. 什么是暴露封装类方法的经验法则
- 9. 在iPhone静态库上暴露标题
- 10. 为什么必须在静态类中定义C#扩展方法?
- 11. 如何暴露V8中的类方法
- 12. 为什么派生类不能访问基类静态方法?
- 13. 为什么我不能在类/静态方法中使用private,internal,fileprivate方法?
- 14. 静态方法可能只对一类
- 15. 在类中暴露列表最合适的方式是什么?
- 16. 为什么父类的静态方法隐藏在子类中?
- 17. 在非静态类中声明一个静态方法的意义是什么?
- 18. 为什么可以调用非静态类的静态方法?
- 19. 为什么不能从静态上下文中引用方法定义?
- 20. 非静态类中的静态方法和静态类中的静态方法有什么区别?
- 21. 什么是静态类与只有静态方法的类之间的区别?
- 22. 为什么不在LinkedList中定义ListIterator的静态类?
- 23. 为什么静态类不能有非静态方法和变量?
- 24. 为什么所有静态方法/变量都在非静态类中?
- 25. 在Python中暴露C++类(只能加载ET_DYN和ET_EXEC)
- 26. 为什么静态成员函数只能在类定义中声明为静态而不是在其自己的定义中声明?
- 27. 什么jQuery被暴露?
- 28. 非静态类中静态方法的要点是什么?
- 29. 为名称空间上暴露的方法创建类型定义
- 30. 手动暴露自定义NSView绑定需要什么?
可能的重复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
也许它会加快在编译器中搜索扩展方法的速度,因为它需要看的更少。但是我不确定标记带有属性的类不会更好,或者它实际上很重要(在从索引缓存中读取之后,您只需要走一次) – CodesInChaos