C#中的独立功能

时间:2009-05-18 10:37:38

标签: c#

作为一名C ++程序员,每次我使用C#时,我都想知道为什么它缺乏对独立功能的支持;换句话说:不属于任何类的函数。我真的很想念这个功能,因为独立功能允许向类添加功能而无需完全私有访问,从而避免了难以维护的整体类。此外,它允许扩展第三方库。我知道你可以使用静态类,但是类名完全无关紧要,使得客户端代码不必要地冗长。

例如。我想创建一个辅助函数来计算字符串中的单词。我怎样才能避免写“StringHelperClass.CountWords();”在客户端代码? StringHelperClass充当命名空间,只有我不能写“使用StringHelperClass;”。我被迫在每次使用时重复“StringHelperClass”,而很明显它是一个字符串辅助函数,因为它唯一的参数是一个字符串。

有没有办法扩展类的功能,同时保持客户端代码简洁?

2 个答案:

答案 0 :(得分:10)

编辑:请注意,由于在C#6中添加了using static ....指令,因此这在很大程度上可视为等效功能。只需使用常规的.NET static方法,然后使用using static指令,这些方法就可以立即使用。


更好的问题是:

“为什么要包括它?”

鉴于C#在没有独立功能的情况下保持良好状态,添加它们的要求是什么?特别是,静态实用程序类可以很好地托管(例如常规或扩展方法),并在发生冲突时允许简单的消歧。

它也(如评论中的OregonGhost注释)有助于模块化代码,防止智能死亡等。

那么:为什么要添加它们?有什么问题(在C#中)尚未解决?

答案 1 :(得分:1)

我同意这是我发现缺少C#的功能。主要原因是使用函数的冗长。类名作为命名空间,但是没有办法在代码文件的开头简单地“使用”该命名空间。因此,例如,如果您想在C#中编写OpenGL,则必须键入以下内容:OpenGL.glClearDepth(1.0f); OpenGL.glEnable(GL_DEPTH_TEST);等我知道它可能与将所有东西都变成一个类的基本概念有关,但我真的不喜欢强迫你以某种方式做事的语言。当然,这可能是我没有真正使用C#的原因,除非我别无选择(比如在工作中)。