静态和非静态(C#)

静态成员:

加入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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值