static的认识

在敲机房收费系统时,Static静态变量一直有点疑问!sharedstatic应该在什么时候应用,到底有什么区别?

百度百科中的解释:


静态全局变量有以下特点:

1,该变量在全局数据区分配内存;---保持内容的持久

2,未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);---默认初始化为0

3,静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;---隐藏

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块.在vb.net中不能用static来声明函数。只能用来声明过程中的静态变量,并且不能用来声明成员变量。shared既可以用来声明变量也可以用来声明函数,但是只能用来声明成员变量,这一点刚好跟static相反。

下面来简明介绍静态变量的作用和缺点:

Static的作用


1)第一个作用:隐藏。


当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。即在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。而且只可被这一模块内的其他函数调用,也就是,这个函数被限制在声明它的模块的本地范围内使用.


应用:在嵌入式系统中,要时刻懂得移植的重要性,程序可能是很多程序员共同协作同时完成,在定义变量及函数的过程,可能会重名,这给系统的集成带来麻烦,因此保证不冲突的办法是显示的表示此变量或者函数是本地的,static即可。


2第二个作用:保持变量内容的持久。


存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。即在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。


(3)第三个作用:默认初始化为0。


其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。

在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;而且此时类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

缺点:

静态方法/变量属于类级别的,意味着不需要创建对象就可以使用,因此有下面缺点:

1. 静态方法不能调用非静态的方法和变量;(非静态方法可以任意的调用静态方法/变量)

2.不能使用this关键字(很明显,它属于类级别,没有创建对象怎么可以用this

VB.net 中为Shared

C# C++.net中为Static

虽然说表现形式不同,但是都是为了解决同一类问题。


至于为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?

请参考博客http://www.newsmth.net/pc/pccon.php?id=2206&nid=227918



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值