Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > VB.NET > Visual Basic 9.0 前沿播报·静态篇(二)对象初始化器和匿名类型
【标  题】:Visual Basic 9.0 前沿播报·静态篇(二)对象初始化器和匿名类型
【关键字】:Visual,Basic,9.0
【来  源】:http://blog.joycode.com/ninputer/archive/2005/09/15/63465.aspx

Visual Basic 9.0 前沿播报·静态篇(二)对象初始化器和匿名类型

Your Ad Here

在Visual Basic 2005以前的版本,如果类或结构没有定义初始化构造函数,我们就必须用属性逐一赋值的方式。比如

'假设有个结构Person,有Name和Age属性 'VB 2005代码 Dim p As Person With p .Name = "Jack" .Age = 27 End With

这样,对象的初始化不能与对象的定义同时完成,多少有些不便。特别是我们在表达式中需要Person类型的时候,无法就地生成,必须另写代码初始化,这会打断我们的思路。Visual Basic 9.0为所有对象提供了一个表达式初始化语法,让你可以对任何公有属性在初始化时一并赋值。(其实我早就想要这个语法了,呵呵)

Dim p = New Person{.Name = "Jack", .Age = 27}

看这个语法比以前简洁多了,就好像把With语句写在了初始化语句里一样。初始化语法并没有取代构造函数,而且它还可以和构造函数任何混合使用。比如假设Person类型有一个初始化Name的构造函数,你便可以这样写。

Dim p = New Person("Jack") {.Age = 27}

也就是说,初始化器并非要求对所有属性进行初始化。对系统里的List(Of T)类型,VB9还专门实现了List初始化语法:

Dim l1 = New List(Of Integer){1, 2, 3, 4} Dim l2 = New List(Of Person){ _ New Person{.Name = "Jack", .Age = 27}, _ New Person{.Name = "Lucy", .Age = 26}}

这种特性着实给我们编写代码带来了很大的方便,也让“表达式”所能表达的内容大大丰富了。“一句话编程”正在慢慢引入VB,呵呵。

最后我们介绍一下匿名类型。当你恰好需要一个结构变量有A As String, B As Integer两个成员,但事先没有定义。在VB2005中,你只能去定义它,而在VB9中,你可以将它当作一个Tuple

Dim item = New {.A = "xyz", .B = 123}

这一句,VB会为你创造出一个类型,就有两个字段A和B,分别是String和Integer类型,而item就直接成为“那个类型”的实例。匿名类型如前所述,最主要的用途是当成Tuple,可以用来保存查询的临时结果。这时候,局部变量类型推测的好处就体现出来了。注意,按照目前的设计,这一切过程都是在编译时完成的,匿名类型会变成实际类型保存在你的项目中,因此这一操作代价较大。所以Visual Basic组可能还在讨论使用CLR新特性做动态Tuple,让我们继续期待吧。

Visual Basic 9.0 前沿播报·静态篇(三)扩展方法:【上一篇】
Visual Basic 9.0 前沿播报·静态篇(一)局部变量类型推测和数组初始化器:【下一篇】
【相关文章】
  • Visual Basic 9.0 前沿播报·静态篇(三)扩展方法
  • Visual Basic 9.0 前沿播报·静态篇(四)嵌套函数和Closure
  • Visual Basic 9.0 前沿播报·静态篇(五)查询包含
  • Visual Basic 9.0 前沿播报·静态篇(六)松弛委托和可为空类型语法增强
  • Visual Basic 9.0 前沿播报·动态篇(一)动态标识符
  • Visual Basic 9.0 前沿播报·动态篇(二)动态接口
  • Visual Basic 9.0 前沿播报·动态篇(三)XML字面量和XML后期绑定啊
  • Visual Studio 2005 & SQL Sever 2005 RTM Released!
  • Visual Studio 2005 Team Suite (VSTS) 也可以下载了!
  • 小程序:Word 文档批量查找/替换 (Visual Basic 6.0)
  • 【随机文章】
  • solaris 第三章 系统启动与关闭
  • 游戏引擎剖析(六)
  • 输入了注册码还是有60天的注册期限呀 ? flycat2002-05-08, 07:19
  • 关于emacs21设置问题
  • 终于做出了一题IOI了,有点心得。
  • 用Java编写简单UDP网络通信程序
  • struts构建文件上传(2)
  • 遭受拒绝服务攻击事件的分析及对策 - 转载
  • postfixinstall(ZT)
  • 皮肤划痕症皮肤划痕症遗传划痕症治疗美国康本告诉你最佳答案
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.