描述VB.NET DirectCast运算符
创始人
2024-06-10 00:11:11
0

本人很喜欢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

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...