C#中的独立功能

Dim*_* C. 5 c#

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

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

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

Mar*_*ell 10

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


更好的问题是:

"它为什么要包含它?"

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

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

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

  • 那是真的.IMO静态实用程序类实际上为代码增加了价值,因为它们迫使您模块化代码,这总是一件好事.当然,这可能被滥用,但对自由浮动函数也是如此.哦,扩展方法让事情变得更好.例如,为什么字符串函数可以添加到字符串类时是自由浮动的?:) (3认同)

Ran*_*oet 3

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