What is a “static” class?
在c中:
1 | public static class ClassName {} |
还有:
1 | public class ClassName {} |
首先,对一个回答的评论被问及"静态"是什么意思。在C术语中,"static"表示"与类型本身相关,而不是与类型的实例相关。"您可以使用类型名而不是引用或值访问静态成员(从其他类型)。例如:
1 2 3 4 | // Static method, so called using type name Guid someGuid = Guid.NewGuid(); // Instance method, called on a value string asString = someGuid.ToString(); |
现在,静态类…
静态类通常用作"实用程序"类。典型的例子可能是
- 静态类总是从
object 派生。不能指定其他基类型,也不能使静态类实现接口。 - 静态类不能有任何实例成员-所有变量、方法等都必须是静态的。
- 静态类不能声明任何实例构造函数,编译器默认情况下不创建无参数构造函数。(在静态类进入C 2.0之前,人们通常会用一个私有的构造函数创建一个抽象类,以防止实例化。这里不需要。
- 静态类是隐式抽象的(即编译到描述抽象类的IL中),但不能自己添加
abstract 修饰符。 - 静态类是隐式密封的(即编译到描述密封类的IL),但不能自己添加
sealed 修饰符。 - 静态类可以是泛型的。
- 静态类可以嵌套在非静态类或静态类中。
- 静态类可以具有嵌套类型,非静态或静态。
- 只有静态的顶级非泛型类才能包含扩展方法(C 3.0)。
静态类不能实例化,只能包含静态成员。因此,对静态类的调用如下:
非静态类可以实例化,并且可以包含非静态成员(实例构造函数、析构函数、索引器)。非静态类的非静态成员只能通过对象调用:
1 2 |
1 | public static class ClassName {} |
静态类就像一个全局变量:您可以在代码中的任何地方使用它,而无需实例化它们。例如:classname。在点运算符之后,可以使用它的任何属性或函数。
1 | public class ClassName {} |
但是如果您有非静态类,那么您需要创建这个类的实例。例如:
1 |
静态类也不能从继承,而具有静态成员的非静态类可以从继承。
静态类中的所有方法/属性都必须是静态的,而"普通"类可以包含实例和静态方法的混合。
不能实例化(创建)静态类的对象。它只能包含静态成员。
示例:System.Math
静态类只能包含静态成员。
静态成员可以在不先实例化类的情况下使用。
http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html-这是一篇非常好的文章。这是为Java编写的。但我认为C中的概念也应该相同。
静态类和成员用于创建不需要创建类的实例(使用
当不依赖于静态类本身的对象标识时,可以声明静态类,因此静态类只能包含静态成员。
当加载包含类的程序或命名空间时,CLR将加载这些类。
它们也是密封的,不能从中继承。
C中的静态变量
作为自动变量的类的局部变量但静态变量不会消失,因为函数不再处于活动状态。它们的值将保持不变。如果控件返回,静态变量的值将相同
C中的静态函数对其他文件中的函数不可见的函数。
*cpp中的静态数据成员*数据成员可以是cpp中的变量或函数静态应用于两个数据成员类本身可以是静态的"该类中的所有对象只共享一个静态数据成员副本"静态数据成员只能访问静态数据成员
静态类此类无法实例化对象