c# - 为什么需要将静态方法包装到一个类中?

标签 c# static-methods

对于这个问题的未经学习的性质,我们深表歉意。如果有一个简单的答案,只要一个解释链接就会让我非常高兴。

经过 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# 中,任何方法都必须在类中声明。这就是指定语言的方式。

静态类其实更akin to a module而不是一个类,所以我也认为你应该能够:

  • 在类之外定义一个函数;
  • 以与导入命名空间相同的方式导入模块(使用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!
  }
}

另外,看看 extension methods ,他们可能会让你以不同的方式“解决”这个问题。 TextProcessor 中的方法请求成为string 扩展方法。

关于c# - 为什么需要将静态方法包装到一个类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8131546/

相关文章:

c# - 文件的 ASP.NET "one time cache"

c# - 是否可以按名称访问属性,这是一个变量?

Java - 通用静态方法

c# - HTML.ValidationMessage不会在 View 中显示错误

C#/TypeScript 字节数组在发送到客户端时得到编码

Java:静态方法的单元测试并行执行(将在生产中的多个实例上运行)

c++ - 为什么这里需要静态

groovy - 将带有 .& 运算符的参数传递给静态方法

java - 为什么我不能在 Java 接口(interface)中定义静态方法?

c# - Task.WhenAll 未完成