关于c#中的静态类

时间:2011-01-13 05:55:27

标签: c# static

  

可能重复:
  When to Use Static Classes in C#

为什么有人会写一个静态类。我们可以在任何类中声明一个静态方法,只需调用该方法而不创建类实例。所以请告诉我一个人会创建一个静态类的情况,并告诉我静态类和普通类之间的主要区别。

感谢

5 个答案:

答案 0 :(得分:2)

无法实例化静态类。它的主要用途是明确表示该类没有实例方法,并防止人们意外地尝试“新”该类。

答案 1 :(得分:2)

静态类不能包含任何构造函数,只能访问第一次访问其成员之一时调用的静态构造函数。

这基本上就是区别。性能方面,我们还可以免费获得另一个编译器,因为它可以检查以确保不会意外添加实例成员。编译器将保证无法创建此类的实例。

静态类也是密封的,因此无法继承。

http://msdn.microsoft.com/en-us/library/79b3xss3(v=VS.100).aspx

静态类与非静态类基本相同,但有一个区别:静态类无法实例化。换句话说,您不能使用new关键字来创建类类型的变量

另一个有效点是扩展方法必须在静态类

中声明

http://en.wikipedia.org/wiki/Extension_method

然而,C#3.0中扩展方法的新语言特性使后一代码成为可能。这种方法需要静态类和静态方法。

答案 2 :(得分:2)

一般来说,我建议你不要写静态类。

有些情况下你想要它们

扩展方法必须依赖于静态类。这是拥有静态类的最佳理由。

如果你确实有一堆静态方法作为扩展方法没有意义,并且不适合你的对象模型那么静态方法的集合可能有空间。当您无法重新设计应用时尤其如此。

有时会发生这种情况,因为您正在处理一些您无法改变的第三方内容。然后,如果你最终得到一个只有静态方法的类 - 你应该将它设置为静态,因为任何创建实例的人显然都不理解你做了什么。

在大多数情况下说了所有这些我的建议是避免静态方法,类和数据。我不是说从不使用它们 - 只是尽量不要。

答案 3 :(得分:1)

在静态类中,所有方法都是静态的。我们不能在静态类中声明普通方法。

静态类和普通类之间的差异。

我们不能创建静态类的对象,当我们使用静态类的方法时只使用classname.MethodName但是在普通类中我们必须首先创建类的对象然后我们才能访问普通类的方法。

static class ex。

Class1.functionname();

普通班前。

Class1 cs = new class1();

cs.functionname();

functionname不应该是私有的。

答案 4 :(得分:1)

不同之处在于您无法实例化静态类。因此,如果您不希望它被实例化,那么您将使类成为静态。这在您处理线程问题时很有用,并且您希望保证所有线程都使用同一个类的实例。

更哲学的场景是当你有一个不需要实例化的类时,例如(例如)你正在构建一个数据库应用程序并且你创建了一个类来完成所有数据库访问的东西。它基本上只是一组方法。然后使类静态只是使设计更加一致的一步。