什么是“静态”类?

在C#中有什么区别:

public static class ClassName {} 

和:

 public class ClassName {} 

静态类不能实例化,只能包含静态成员。 因此,对静态类的调用如下: MyStaticClass.MyMethod(...)MyStaticClass.MyConstant

一个非静态类可以被实例化,并且可以包含非静态成员(实例构造函数,析构函数,索引器)。 非静态类的非静态成员只能通过对象调用:

 MyNonStaticClass x = new MyNonStaticClass(...); x.MyNonStaticMethod(...); 

首先,对一个答案的评论问到“静态”是什么意思。 用C#术语来说,“static”意思是“与types本身有关,而不是types的一个实例”。 您可以使用types名称(而不是参考或值)来访问静态成员(来自另一个types)。 例如:

 // Static method, so called using type name Guid someGuid = Guid.NewGuid(); // Instance method, called on a value string asString = someGuid.ToString(); 

现在,静态类…

静态类通常用作“实用程序”类。 规范的例子可能是System.Math 。 创build一个math实例是没有意义的 – 它只是“是”。 一些规则(“可以”和“不可以”):

  • 静态类总是从object派生。 您不能指定不同的基本types,或者使静态类实现一个接口。
  • 静态类不能有任何实例成员 – 所有variables,方法等都必须是静态的。
  • 静态类不能声明任何实例构造函数,编译器默认情况下不会创build无参数构造函数。 (在静态类在C#2.0之前,人们经常会创build一个带有私有构造函数的抽象类,从而阻止了实例化。
  • 静态类是隐式抽象的(即它们被编译为描述抽象类的IL),但是你不能自己添加abstract修饰符。
  • 静态类是隐式密封的(即它们被编译为描述密封类的IL),但是你不能自己添加sealed修饰符。
  • 静态类可能是通用的。
  • 静态类可以嵌套在非静态或静态类中。
  • 静态类可能具有嵌套types,非静态types或静态types。
  • 只有静态顶级非generics类可以包含扩展方法(C#3.0)。

静态类也不能被inheritance,而具有静态成员的非静态类可以被inheritance。

 public static class ClassName {} 

staic类就像一个全局variables,你可以在你的代码中的任何地方使用它,而不需要实例化它们。 例。 class级名称。 点运算符后,您可以使用它的任何属性或function。

  public class ClassName {} 

但是如果你有非静态类,那么你需要创build这个类的一个实例。 例。

  ClassName classNameObject = new ClassName(); 

静态类中的所有方法/属性必须是静态的,而“普通”类可以包含实例和静态方法的混合。

你不能实例化(创build一个静态类的对象)。 它只能包含静态成员。

例如:System.Math

静态类只能包含静态成员。

静态成员可以使用,而不先实例化一个类。

静态类和成员用于创build可以访问的数据和方法,而无需创build类的实例(使用new关键字,它们不能有构造函数)。

静态类可以在不依赖于自己的对象标识的情况下声明,因此静态类只能包含静态成员。

当包含该类的程序或命名空间被加载时,CLR将加载这些类。

他们也被封存,不能被inheritance。

http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html – 非常好的文章。 这是为Java。 但是我认为C#中的概念也应该是一样的。

c中的静态variables

作为自variables的类的局部variables,但静态variables不会消失,因为函数不再是活动的。他们的值持续。如果控制回来,静态variables具有相同的值

c函数中的静态函数对其他文件中的函数不可见。

* cpp中的静态数据成员*数据成员可以是cpp中的variables或函数静态适用于两个数据成员类本身可以是静态的“只有一个静态数据成员共享该类中所有对象的副本”静态数据成员可以只访问静态数据成员

静态类这个类不能实例化对象