对不起这个问题没有学问的性质。如果有一个简单的答案,只需一个解释链接就会让我感到非常高兴。
编程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();
}
}
我的问题是:为什么有必要将这些静态方法包装在静态类中? 它似乎没有任何意义。有没有办法让我们可以将这些方法单独包装在一个类中?我知道封装是有益的,但我没有看到静态类包含静态方法的用法。有没有我风格或其他方面缺少的东西?我完全吠了一棵傻树吗?我想的太多了吗?
答案 0 :(得分:7)
在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
扩展方法。
答案 1 :(得分:2)
This post by eric lippert给出了非常详细的解释。我不确定这个家伙“eric”是否知道他在说什么或不知道; - )
答案 2 :(得分:1)
让方法在随机命名空间中徘徊是有点尴尬。
我怀疑答案是提供“范围”。仅仅因为方法是静态的,并不意味着它没有范围。它仍然可以访问其他静态私有方法或成员变量 - 该类为这些东西提供了“家”。
静态类也可以具有静态构造函数,这些构造函数在第一次使用静态方法时被调用,因此这提供了根据需要设置填充的能力。
这更像是一种组织设计,而不是技术限制所带来的任何东西。
答案 3 :(得分:-1)
这个主题已经有很多主题有足够的信息......你可以找到一个here..
答案 4 :(得分:-3)
静态方法是在运行时创建的类的单个实例中调用的方法。