科技时代新浪首页 > 科技时代 > 软件 > 正文

老树新芽 体验Visual Basic 9.0新功能(2)


http://www.sina.com.cn 2005年09月27日 18:05 天极yesky

    隐式类型本地变量

  在一个隐式类型本地变量的声明中,本地变量的类型是从等号右边的本地声明语句的初始化表达式中推断出来的。举例来说,编译器推断如下的变量声明:

Dim Population = 31719
Dim Name = "Belize"
Dim Area = 1.9
Dim Country = New Country{ .Name = "Palau", ...}

  因此它们等同于如下的显式类型声明:

Dim Population As Integer = 31719
Dim Name As String = "Belize"
Dim Area As Float = 1.9
Dim Country As Country = New Country{ .Name = "Palau", ...}

  因为本地变量声明的类型缺省是通过推断的,所以怎样设置选项 Strict都没有关系,对这些变量的访问通常都是前期绑定的。在VB9.0里程序员必须显式指定后期办定,即显示声明变量类型为Object,如下:

Dim Country As Object = new Country{ .Name = "Palau", ... }

  要求显式的后期绑定阻止了非正常使用后期绑定,更重要的是允许对新的数据类型比如XML使用后期绑定的强大表达功能,如下面要看到的一样。这里将会有一个可选的工程级的对当前行为的切换。

  在一个For...Next或者For Each...Next中的循环控制变量也可以是一个隐式类型变量,当循环控制变量被指定的时候,如For Dim I = 0 To Count或者For Each Dim C In SmallCountries,标识符定义了一个新的隐式类型本地变量,它的类型类型是通过初始化或者集合对象表达推断的,并且受限于整个循环内。在For的右边使用Dim是VB9的一个新特性,也是作为隐式类型的循环变量存在的。

  通过这样的类型推断方法,我们可以重写打印所有小国家的循环:

For Each Dim Country In SmallCountries
 Console.WriteLine(Country.Name)
Next

  Country的类型被推断为Country,也即SmallCountries的元素类型。

  对象和集合对象初始化

  在Visual Basic中,With语句简化了对具有多个成员的聚合值的访问方式,从而无需多次指定目标的表达式。在一个With的语句块中,一个对成员访问的表达式通过"."来开始,这和加上With语句中的目标表达式效果是相同的,举例来说,如下的语句初始化了一个新的Country实例并且也给它的所有域赋值:

Dim Palau = New Country()
With Palau
 .Name = "Palau"
 .Area = 458
 .Population = 16952
End With

  新的VB9.0的对象初始化采用了和With相类似的表达形式来创建复杂的对象。使用对象初始化,我们可以将上面两条语句合并为一个(隐式类型)本地声明,如下:

Dim Palau = New Country { _
 .Name = "Palau",_
 .Area = 458, _
 .Population = 16952
}

  这样的表达式方式的对象初始化对查询非常重要。典型的一个查询看上去像一个在等号右边使用Select子句初始化的一个对象声明。因为Select子句返回一个表达式,那么我们必须使用一个表达式来初始化整个对象。

  就像我们已经看到的那样,对象初始化对创建集合对象式的复杂对象是非常方便的,所有的集合对象都支持一个Add方法,可以通过使用集合对象初始化表达式来实现初始化。举例来说,给定下面的城市作为局部类:

Partial Class City
 Public Property Name As String
 Public Property Country As String
 Public Property Longitude As Float
 Public Property Latitude As Float
End Class

  我们可以创建一个列表List(Of City)如下:

Dim Capitals = New List(Of City){ _
 { .Name = "Antanarivo", _
  .Country = "Madagascar", _
  .Longitude = 47.4, _
  .Lattitude = -18.6 }, _
 { .Name = "Belmopan", _
  .Country = "Belize", _
  .Longitude = -88.5, _
  .Latitude = 17.1 }, _
 { .Name = "Monaco", _
  .Country = "Monaco", _
  .Longtitude = 7.2, _
  .Latitude = 43.7 }, _
 { .Country = "Palau", .Name = "Koror", _
  .Longitude = 135, _
  .Latitude = 8 } _
}

  这个例子让然使用对象初始化,初始化的构造器都是从上下文推断出来的。在这里,所有的初始化都等同于全形式的NewCity{...}。

[上一页] [1] [2] [3] [4] [5] [6] [7] [下一页]

发表评论

爱问(iAsk.com)



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2005 SINA Inc. All Rights Reserved

版权所有 新浪网