静态类和非静态类以及静态方法和非静态方法的区别

1、静态类中不能包括非静态成员,比如非静态方法、构造函数;非静态类中可以包括静态成员。如果不按照这种规则静态类编译器会检查报错。

简而言之就是:静态类中所有的成员必须是静态成员,但是静态成员不一定是在静态类中 。

2、静态类无法实例化,其成员可以直接使用;非静态类中的静态成员不需要实例化,可以直接使用,非静态类中的非静态成员必须实例化。

简而言之就是:不管在哪静态成员都不需要实例化其所在类,而非静态成员必须实例化其所在类。

3、静态成员之所以执行速度快,是因为其在编译的时候编译器放在了静态区(保存自动全局变量和 static 变量)静态区的内容在总个程序的生命周期内都存在,而普通类的中的非静态成员需要实例化,在栈中存引用地址,堆中存实例对象,从而获取方法,所以速度慢。

静态成员变量在程序启动的时候,就全部装入内存的静态区中,而不管这些方法、属性以后有没有用到
。即使是没有人再访问程序,这部分内存仍然不会释放。

4、静态成员变量是共享的 也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它
所有实例所见。

5、静态方法和属性不能访问其包含类型中的非静态字段和事件。

6、静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员。

7、C# 不支持静态局部变量(在方法内部定义静态变量)。

8、静态类是密封类(sealed),无法被继承。其密封是有自我保护的作用,并且符合编程三大思想之封装思想。

9、静态成员等同于全局变量,整个系统中存在统一块区域(静态区)中,是共享的,比如static into num=0;编译的时候num就已经是1了,A线程改了其值为1,B线程获取的时候num就是1了。

时间: 2024-10-05 03:16:36

静态类和非静态类以及静态方法和非静态方法的区别的相关文章

C# 静态类与非静态类、静态成员的区别

静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明.程序员必须声明一个私有构造器.私有构造器禁止开发者在类的范围之外实例化类的实例.使用私有构造器的效果与使用静态类的效果非常相似.两者的区别在于,私有构造器方式仍然可以从类的内部对

静态类和非静态类的主要区别

如有雷同,不胜荣幸,若转载,请注明 主要区别在于静态类不能实例化,静态类编译器能够执行检查确保不是偶然的添加实例成员,C#编译器会自动把它标记为sealed,静态类中不能创建非静态的方法.即静态方法中只能创建静态方法,但在非静态类中可以调用静态方法 静态类的主要特性: 1:仅包含静态成员. 2:无法实例化. 3:是密封的. 4:不能包含实例构造函数. 5:非静态类可以包含静态的方法.字段.属性或事件: 6:静态方法和属性不能访问其包含类型中的非静态字段和事件 7:静态方法只能被重载,而不能被重写

静态类和非静态类

静态类与非静态类基本相同,但存在一个区别:静态类不能实例化. 也就是说,不能使用 new 关键字创建静态类类型的变量. 因为没有实例变量,所以要使用类名本身访问静态类的成员. 例如,如果名为 UtilityClass 的静态类有一个名为 MethodA 的公共方法,则按下面的示例所示调用该方法: C# UtilityClass.MethodA(); 对于只对输入参数进行运算而不获取或设置任何内部实例字段的方法集,静态类可以方便地用作这些方法集的容器. 例如,在 .NET Framework 类库

深入理解C# 静态类与非静态类、静态成员的区别

静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明.程序员必须声明一个私有构造器.私有构造器禁止开发者在类的范围之外实例化类的实例.使用私有构造器的效果与使用静态类的效果非常相似. 两者的区别:私有构造器方式仍然可以从类的内部对类

静态类和非静态类的主要差别

如有雷同,不胜荣幸,若转载,请注明 主要差别在于静态类不能实例化,静态类编译器可以运行检查确保不是偶然的加入实例成员,C#编译器会自己主动把它标记为sealed.静态类中不能创建非静态的方法.即静态方法中仅仅能创建静态方法.但在非静态类中可以调用静态方法 静态类的主要特性: 1:仅包括静态成员. 2:无法实例化. 3:是密封的. 4:不能包括实例构造函数. 5:非静态类能够包括静态的方法.字段.属性或事件. 6:静态方法和属性不能訪问其包括类型中的非静态字段和事件 7:静态方法仅仅能被重载,而不

C#基础(七)——静态类与非静态类、静态成员的区别

静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明.程序员必须声明一个私有构造器.私有构造器禁止开发者在类的范围之外实例化类的实例.使用私有构造器的效果与使用静态类的效果非常相似.两者的区别在于,私有构造器方式仍然可以从类的内部对

.Net中的静态类和非静态类、静态成员和非静态成员

正如标题,这样的资料网上很多,也说的很到位,但是都感觉解释的很多,理论性过强,在这里我简单的总结和概括下他们之间的区别,可以一目了然: 一.静态类和非静态类 Definition: 静态类可以视为类库中都是单一的过程,不存在“状态”的概念: 非静态类是存储有状态的一类操作过程 Summary: 非静态类可以包含静态方法: 静态类只能包含静态方法(不允许有非静态方法的存在) 二.静态方法和非静态方法(实例方法) Priority in Memory When Class Loaded: 类在加载时

静态类和非静态类的区别

转自:http://joe5456536.blog.163.com/blog/static/8537477320117136658629/ http://www.cnblogs.com/devinzhang/archive/2012/04/27/2473570.html 静态方法与非静态方法区别使用大致如下 ● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直

转载 C#中静态类和非静态类比较

转载原地址: http://www.cnblogs.com/NothingIsImpossible/archive/2010/07/28/1786706.html C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 下面我们分四个方面来看看