浅析VB.NET局部静态变量

开发 后端
这里介绍由于VB.NET局部静态变量的实质是类的字段,所以它和真正的局部变量还是有所不同的。比如在多线程条件下,对VB.NET局部静态变量的访问就和访问字段相同。

经过长时间学习VB.NET局部静态变量,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。VB.NET能够实现很多C#不能做到的功能,如When语句、Optional参数、局部Static变量、对象实例访问静态方法、Handles绑定事件、On Error处理异常、Object直接后期绑定等等。VB和C#同属.NET的语言,编译出来的是同样的CIL,但为什么VB支持很多有趣的特性呢。我们一起来探究一下VB.NET局部静态变量。

VB.NET局部静态变量

VB支持用Static关键字声明局部变量,这样在过程结束的时候可以保持变量的数值:

  1. Public Sub Test1()  
  2. Static i As Integer  
  3. i += 1 '实现一个过程调用计数器  
  4. End Sub 

我们实现了一个简单的过程计数器。每调用一次Test,计数器的数值就增加1。其实还有很多情况我们希望保持变量的数值。而C#的static是不能用在过程内部的。因此要实现过程计数器,我们必须声明一个类级别的变量。这样做明显不如VB好。因为无法防止其他过程修改计数器变量。这就和对象封装一个道理,本来应该是一个方法的局部变量,现在我要被迫把它独立出来,显然是不好的设计。那么VB是怎么生成局部静态变量的呢?将上述代码返汇编,我们可以清楚地看到在VB生成的CIL中,i不是作为局部变量,而是作为类的Field出现的:

  1. .field private specialname int32 $STATIC$Test1$2001$i 

也就是说,i被改名作为一个类的字段,但被冠以specialname。在代码中试图访问$STATIC$Test1$2001$i是不可能的,因为它不是一个有效的标识符。但是在IL中,将这个变量加一的代码却与一般的类字段完全一样,是通过ldfld加载的。我觉得这个方法十分聪明,把静态变量变成生命周期一样的类字段,但是又由编译器来控制访问的权限,让它成为一个局部变量。同时也解释了VB为什么要用两个不同的关键字来声明静态变量—— Static和Shared。

由于VB.NET局部静态变量的实质是类的字段,所以它和真正的局部变量还是有所不同的。比如在多线程条件下,对VB.NET局部静态变量的访问就和访问字段相同。

【编辑推荐】

  1. 原理分析VB.NET开发控件
  2. 自己动手修改VB.NET支付宝接口
  3. 如何快速掌握VB.NET控件数组
  4. 描述VB.NET IDisplayer接口
  5. 事例概括VB.NET Display方法
责任编辑:佚名 来源: CSDN
相关推荐

2010-01-13 10:34:23

VB.NET局部静态变

2009-10-12 14:13:00

VB.NET使用局部变

2009-11-10 15:52:20

VB.NET变量名

2009-11-03 09:26:13

VB.NET方法

2009-10-15 17:41:14

VB.NET Impo

2009-11-03 13:48:02

VB.NET枚举

2010-01-20 10:27:07

VB.NET隐式类型局

2010-01-21 10:57:12

VB.NET局部变量类

2010-01-08 15:22:22

VB.NET局部变量

2009-10-13 15:20:02

VB.NET使用Dra

2009-10-12 14:32:40

VB.NET实现定时关

2009-10-10 15:43:51

2009-11-03 10:00:20

VB.NET New方

2009-10-16 14:07:18

VB.NET使用Mon

2009-10-13 14:42:30

VB.NET静态成员

2009-11-02 17:49:05

VB.NET抽象类

2009-11-03 12:52:38

VB.NET Wind

2009-10-26 17:24:42

VB.NET终端服务启

2010-01-13 17:16:37

VB.NET冒号

2009-10-14 10:08:05

VB.NET编写DEC
点赞
收藏

51CTO技术栈公众号