静态和非静态(C#)
来源:互联网 发布:js格式化时间戳format 编辑:程序博客网 时间:2024/06/13 06:02
静态成员:
加入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#:静态与非静态
- 静态函数和非静态函数的区别(静态方法和非静态方法)
- C语言:静态全局变量和非静态全局变量的区别
- C语言中的静态变量和非静态变量
- 静态和非静态方法
- 静态和非静态问题
- 关于静态和非静态
- 静态块(变量)和非静态块(变量)
- 工厂方法注入(静态和非静态)
- 静态变量和非静态(实例)变量的区别
- java手记---静态和非静态
- 静态块和非静态块区别
- C#静态方法和非静态方法
- 静态变量和非静态变量
- 静态变量和非静态变量
- ubuntu12.04配置JDK
- java原样输出一个定义好数组
- 用DWR comet+Spring实现服务器推送的例子--网页聊天室
- Oracle EBS 11.5.10的下载方法
- 淘宝开放平台的盈利模式
- 静态和非静态(C#)
- 孤儿进程和僵尸进程
- 嵌入式linux开发中一些有用的shell脚本收集整理
- 改主机名后Oracle OEM无法使用处理方法
- CSS自动竖向排列的布局方法
- 用java模拟银行业务调度系统
- android JIN使用流程
- Python 命令行参数和getopt模块详解
- Spring3.2+hibernate4整合报错 NoSuchMethodError:openSession()解决办法