网页功能: 加入收藏 设为首页 网站搜索  
Visual Basic 9.0 前沿播报·静态篇(六)松弛委托和可为空类型语法增强
发表日期:2006-03-05作者:[转贴] 出处:  

本期介绍的两个VB9作为数据开发辅助功能的新特性。CLR在.NET 2.0增加了许多关于委托的新特性(但大部分都不为任何语言所支持),其中一个叫做协变的特性允许放松委托与函数绑定时的签名检查(C# 2.0支持)。为了追求更高的灵活性,VB9决定在协变的基础上再进一步,引入松弛委托的概念。主要是按照以下规则为委托的实例指定函数:

1、函数的参数个数和返回值类型与委托的签名相同
2、函数的参数类型与委托签名相应位置上的参数类型有父子类或接口-实现关系,或Visual Basic定义的隐式转换规则。

就是说,假如我们有个委托的签名是F(Integer),那么不仅可以为他的实例指定g(Integer)签名的函数,还可以指定g(Double)或者g(Object)签名的函数,因为Int32有到Double的隐式转换,而且是Object的子类。举个实际的例子:

Public Delegate Sub Test(arg As Integer) '在代码中 Sub Func(arg As Object) Console.WriteLine(arg.ToString()) End Sub Dim d As Test = AddressOf Func d(13)

可为空类型在VB2005中就已经支持,而且和C#一样可以与Object类型互转而不会出现语义不同问题。但是VB2005没有加入C#那些语法糖,如定义语法的简化、lifted运算符和空值判断运算符。虽然我觉得这些语法糖未必有多好吃,不过VB9最终还是添加了一些。首先是问号定义的语法。

Dim var1 As T? Dim var2? As T

以上两个定义是等价的,其意义是:当T为引用类型时,变量的类型为T;当T为值类型时,变量的类型为System.Nullable(Of T)。这样就将所有可为空类型的定义语法统一起来,进而可以用统一的方法判断空值。第二个引用的语法是lifted运算符:当T类型定义的运算符用于T?型时,将自动按以下规则计算:如果原运算结果类型为U,那么使用可为空类型运算的结果就是U?;参与运算的数中有任意一方为Nothing,结果就是Nothing。这样,多年阔别Visual Basic的Null传播又回来了。注意,没有以T?格式定义的引用类型,尽管可以为空引用,但是不会Null传播,只会抛出异常,这一点要注意。

VB9前沿播报的静态篇就到此结束了,从下一篇起,我们进入Visual Basic语法改进的动态篇。

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 Visual Basic 9.0 前沿播报·静态篇(六)松弛委托和可为空类型语法增强
本类热点文章
  VB.Net常用语法
  VB2005语言新功能
  全面剖析VB.NET
  Visual Basic 9.0 前沿播报·动态篇(三..
  连接SQL SERVER的公共类(VB.NET)
  VB.Net的继承
  如何用VB.Net创建一个三层的数据库应用..
  Visual Basic 9.0 前沿播报·动态篇(二..
  Visual Basic 9.0 前沿播报·动态篇(一..
  重写datagrid(禁止对列宽进行拖拽)
  VB.NET面向对象的实现
  用VB.NET实现五子棋的人工智能
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2019 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00468