静态和非静态(C#)
2014-03-16 10:54
281 查看
静态成员:
加入static修饰符可以直接使用:类名+静态成员名访问此静态成员
因为静态成员存在于内存,
静态成员不能访问非静态的成员,只能访问静态成员
静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中。
非静态成员:
无static修饰符;不能用类名直接引用,当类被实例化之后,可以通过实例化的类名进行访问非静态成员需要实例化才会分配内存
非静态成员可以直接访问类中静态的成员(因为静态成员存在于内存)
非静态成员的生存期决定于该类的生存期
关于静态方法:
静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字,因为它是属于整个类!
对于winApp来说,静态成员对于程序员本身省了很多事,而且因为静态成员驻留内存,在方法与方法之间传递共享数据的时候,所以静态成员成了首选。但是不要因为方便,大量使用,尤其是在内存紧张或者用静态方法操作一些共享值的时候,或者要写多用户系统的时候,要慎之又慎。
比如:
static int id = 0; sql = "select * from table whereid=" + id;
理解:
如果这样写的话,在单机测试的时候没有问题,但是在多人同时对数据进行测试的时候,就会有问题了。假如,A用户访问他的id是20,则id的值在内存中为20,而此时B用户访问,他的id是30,则id在内存中的值是30。。A用户的id值则被更改了。如果此时你将这个方法用非静态成员来写,则不会出现这样的情况。因为非静态成员是你声明的时候,实例化的时候才会分配内存。所以A用户访问的时候,App会因为A实例化而给A用户的请求分配内存。而B用户访问的时候也一样会因为B用户的访问而分配内存。所以两个用户访问的是不同的内存块。所以不会出现数据覆盖和错乱的现象。不说是否滥用,如果你出现冲突,说明你没有理解静态成员变量和静态方法的区别,静态方法本身只是一段代码,不管怎么调用他都不会出现问题。但静态成员变量就不行了,他被所有用户共享,如果一个用户改变了他,肯定会影响到别人,这就是常说的并发冲突问题,一般来说在修改共享成员变量时要lock
相关文章推荐
- [C#基础知识系列]全面解析C#中静态与非静态
- C#基础-1:访问控制符、静态与非静态、参数传递
- C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态
- C#中静态成员与非静态成员
- c#中静态与非静态的区别
- C#学习之静态成员和非静态成员,构造函数,方法,方法参数,操作符重载,事件
- C#静态成员和非静态成员
- C#中静态和非静态的区别
- C#基础之----静态成员与非静态成员
- C#基础之静态和非静态的区别
- C#静态和非静态的区别及举例介绍
- C#中的静态与非静态成员入门
- 转:c#静态方法和非静态方法
- [C#基础知识系列]全面解析C#中静态与非静态
- C#静态与非静态比较
- 【转】C#中静态和非静态的区别
- C#静态与非静态 类,成员、结构
- C#:静态与非静态
- C#中的静态与非静态成员入门
- [C#基础知识系列]全面解析C#中静态与非静态