描述VB.NET DirectCast运算符

开发 后端
这里介绍VB.NET DirectCast运算符,在Visual Basic 2005中将加入一个新的运算符——TryCast,相当于C#的as运算符。我一直希望VB有这样一个运算符。VB目前的类型转换运算符主要有 CType和DirectCast。

本人很喜欢VB.NET DirectCast运算符,在工作中也很喜欢总结关于VB.NET DirectCast运算符的经验教训,下面就这个问题来详细说说吧。VB.NET 能够实现很多C#不能做到的功能,如When语句、Optional参数、局部Static变量、对象实例访问静态方法、Handles绑定事件、On Error处理异常、Object直接后期绑定等等。VB和C#同属.NET的语言,编译出来的是同样的CIL,但为什么VB支持很多有趣的特性呢。我们一起来探究一下VB.NET DirectCast运算符。

在Visual Basic 2005中将加入一个新的运算符——TryCast,相当于C#的as运算符。我一直希望VB有这样一个运算符。VB目前的类型转换运算符主要有 CType和DirectCast。他们的用法几乎一样。我详细比较了一下这两个运算符,得出以下结论:

1、在转换成引用类型时,两者没有什么区别,都是直接调用castclass指令,除非重载了类型转换运算符CType。VB.NET DirectCast运算符是不能重载的。

2、转换成值类型时,CType会调用VB指定的类型转换函数(如果有的话),比如将String转换为Int32时,就会自动调用 VisualBasic.CompilerServices.IntegerType.FromString,而将Object转换为Int32则会调用 FromObject。其他数值类型转换为Int32时,CType也会调用类型本身的转换方法实施转换。VB.NET DirectCast运算符则很简单,直接将对象拆箱成所需类型。

所以在用于值类型时,CType没有DirectCast快速但可以支持更多的转换。在C#中,类型转换则为(type)运算符和as运算符。(type)运算符的工作方式与VB的DirectCast很相似,也是直接拆箱或castclass的,但是如果遇到支持的类型转换(如long到 int),(type)运算符也会调用相应的转换方法,但不支持从String到int的转换。C#另一个运算符as则更加智能,它只要判断对象的运行实例能否转成目标类型,然后就可以省略castclass指令,直接按已知类型进行操作,而且编译器还可以自动对as进行优化,比如节省一个对象引用等。所以在将Object转换成所需的类型时,as是最佳选择。

由于as有很多优点,Visual Basic 2005将这一特性吸收了过来,用TryCast运算符就可以获得和as一样的效果,而且语法与VB.NET DirectCast运算符或CType一样。

【编辑推荐】

  1. 详细分析VB.NET WithEvents
  2. 浅析VB.NET局部静态变量
  3. 原理分析VB.NET开发控件
  4. 自己动手用代码实现VB.NET ListView加载数据
  5. 详细介绍VB.NET MyClass
责任编辑:佚名 来源: 51cto.com
相关推荐

2010-01-14 13:08:37

VB.NET运算符

2010-01-07 14:52:41

VB.NET运算符

2010-01-21 17:39:26

VB.NET运算符过程

2010-01-19 15:30:44

VB.NET比较运算符

2010-01-20 14:32:12

VB.NET转换运算符

2010-01-22 17:48:46

VB.NET运算符重载

2010-01-20 14:06:36

VB.NET运算符组合

2009-10-23 10:18:43

VB.NET运算符

2009-10-20 14:21:55

VB.NET fnSi

2010-01-18 14:08:29

VB.NET类型转换

2009-10-19 14:22:13

VB.NET EIF体

2009-10-27 12:06:01

VB.NET IDis

2009-10-20 14:09:05

VB.NET反射功能

2009-10-14 13:56:05

VB.NET数据窗体

2009-10-15 09:02:19

VB.NET申明数组

2009-10-13 09:33:49

VB.NET Web

2009-10-30 11:20:54

VB.NET Proc

2009-10-13 17:16:40

VB.NET Web服

2009-10-14 09:15:15

2009-10-12 12:54:58

VB.NET声明API
点赞
收藏

51CTO技术栈公众号