为什么需要将静态方法包装到类中?

对不起这个问题没有学问的性质。 如果有一个简单的答案,只需要一个解释链接就会让我感到高兴。

编程6个月后,我发现静态类对于存储适用于许多不同类的例程有些用处。 这是我如何使用静态类的简化示例,它是一个用于将文本解析为各种事物的类

public static class TextProcessor { public static string[] GetWords(string sentence) { return sentence.Split(' '); } public static int CountLetters(string sentence) { return sentence.Length; } public static int CountWords(string sentence) { return GetWords(sentence).Length; } } 

我以明显的方式使用它

  class Program { static void Main(string[] args) { string mysentence = "hello there stackoverflow."; Console.WriteLine("mysentence has {0} words in it, fascinating huh??", TextProcessor.CountWords(mysentence)); Console.ReadLine(); } } 

我的问题是:为什么有必要将这些静态方法包装在静态类中? 它似乎没有任何意义。 有没有办法可以将这些方法单独包装在一个类中? 我知道封装是有益的,但我没有看到静态类包含在静态类中的用法。 有什么我风格或其他方面缺少的东西? 我完全吠了一棵傻树吗? 我想的太多了吗?

在C#中,任何方法都必须在类中声明。 这就是指定语言的方式。

静态类实际上更类似于模块而不是类,所以我也认为你应该能够:

  • 定义类外的函数或;
  • 导入模块的方式与导入命名空间的方式相同( using

VB.NET,F#和Nemerle实际上允许你声明模块并导入它们; 什么允许你使用他们的方法不合格。

这是有效的Nemerle:

 using System.Console; // import static methods in the Console class class Hello { static Main() : void { WriteLine("Hello, world!"); // unqualified access! } } 

另外,看看扩展方法 ,它们可能允许您以不同的方式“解决”这个问题。 TextProcessor中的方法是TextProcessor string扩展方法。

这篇由eric lippert撰写的文章给出了非常详细的解释。 我不确定这个家伙“eric”是否知道他在说什么或不知道;-)

让方法在随机命名空间中徘徊是有点尴尬的。

我怀疑答案是提供“范围”。 仅仅因为方法是静态的,并不意味着它没有范围。 它仍然可以访问其他静态私有方法或成员变量 – 并且该类为这些东西提供了“家”。

静态类也可以具有静态构造函数,这些构造函数在第一次使用静态方法时被调用,因此这提供了根据需要设置填充的能力。

它更像是一种组织设计而不是技术限制所带来的任何东西。

已经有很多关于这个主题的线索有足够的信息……你可以在这里找到一个…

静态方法是在运行时创建的类的单个实例中调用的方法。