收藏 分享(赏)

10+了解VB.NET+2008的新增内容.ppt

上传人:czsj190 文档编号:4523898 上传时间:2019-01-01 格式:PPT 页数:27 大小:729.50KB
下载 相关 举报
10+了解VB.NET+2008的新增内容.ppt_第1页
第1页 / 共27页
10+了解VB.NET+2008的新增内容.ppt_第2页
第2页 / 共27页
10+了解VB.NET+2008的新增内容.ppt_第3页
第3页 / 共27页
10+了解VB.NET+2008的新增内容.ppt_第4页
第4页 / 共27页
10+了解VB.NET+2008的新增内容.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、第10章 了解VB.NET 2008的新增内容,与之前的版本相比,VB.NET 2008引入了新的语言功能,其中包括局部类型推理、对象初始值设定项、匿名类型和扩展方法。这些功能是对一项很重要的新功能语言集成查询(LINQ)的支持,但是它们单独使用时也很有用,本章将介绍这些新增功能的应用。,章节内容,10.1 局部类型推理 10.2 匿名类型 10.3 对象初始值设定项 10.4 扩展方法 10.5 Lambda表达式 10.6 语言集成查询,10.1 局部类型推理,局部类型推理允许声明变量时不使用As子句显式声明类型,而是由编译器通过初始化表达式的类型来推断出变量的类型。 1 Public S

2、ub inferenceExample( ) 2 Dim num1 As Integer = 3 使用显式类型声明 3 Dim num2 = 3 使用局部类型推理 4 End Sub,当局部变量未使用As子句进行声明,并且被赋值时,会发生类型推理。编译器将值的类型用作变量的类型。 例如,下面的几行代码各自声明一个String类型的变量。 1 Dim name1 As String = “Springfield“ 使用显式类型声明 2 Dim name2 = “Springfield“ 使用局部类型推理 需要注意的是,局部类型推理不能用于声明类字段,也不能用于声明静态变量。,使用类型推理的代码类

3、似于依赖后期绑定的代码。但是,类型推理可将变量设置为强类型,而不是使变量保留为Object。 编译器使用变量的初始值设定项,在编译时确定变量的类型,以生成早期绑定代码。,10.2 匿名类型,使用匿名类型功能可以不必先编写类定义,即创建新数据类型的实例。 编译器会根据声明该实例时所指定的属性来创建数据类型定义。该类没有可用的名称,而是直接从Object继承的,它包含在声明对象时指定的属性。 由于未指定数据类型的名称,因此将它称为匿名类型。,下面的示例使用对象初始值设定项声明并创建变量anonymousproduct,作为具有两个属性(Name和Price)的匿名类型的实例。 Dim anonym

4、ousProduct = New With .Name = “paperclips“, .Price = 1.29,请注意,声明匿名类型的实例与使用对象初始值设定项声明命名类型的实例相似。 下面的代码声明了Product类的一个实例namedProduct。Dim namedProduct = New Product With .Name = “paperclips“, .Price = 1.29,何时需要使用匿名类型呢?,如果要创建临时对象来包含相关数据,也不需要完整类可能包含的其他字段和方法,匿名类型就是很好的解决方案。 如果每个声明都需要不同的属性选择或者要更改属性顺序,则适于使用匿名类

5、型。 但是,如果项目以固定顺序包括多个具有相同属性的对象,则使用具有类构造函数的命名类型来声明可能更为方便。,10.3 对象初始值设定项,利用对象初始值设定项,可以使用单个表达式来指定复杂对象的属性。 对象初始值设定项可用于创建命名类型和匿名类型的实例。,10.3.1 命名类型,对于命名类型来说,对象初始值设定项提供了一种简单的方式,可以在单个语句中调用类型的构造函数并设置某些属性或所有属性的值。 编译器为该语句调用适当的构造函数: 如果未提供任何参数,则调用默认构造函数; 如果传递了一个或多个参数,则调用参数化构造函数。 在此之后,指定的属性会按照其在初始值设定项列表中出现的顺序进行初始化。

6、,例如,在下面的代码中,Customer类必须存在,且必须具有可以接受字符串值的名为Name和City的成员。 1 Dim cust0 As Customer = New Customer With .Name = “Toni Poe“, _ 2 .City = “Louisville“,如果Customer类包含参数化构造函数,则还可以通过下面的方式声明和初始化Customer对象。 1 Dim cust3 As Customer = New Customer(“Toni Poe“) _ 2 With .City = “Louisville“ 3 4 Dim cust4 As New Cus

7、tomer(“Toni Poe“) _ 5 With .City = “Louisville“,此外,通过将对象初始值设定项与局部类型推理结合使用,可以减少用于声明cust1的代码,这样可以在变量声明中省略As子句。变量的数据类型将从通过赋值创建的对象的类型推断得到。 在下面的示例中,cust6的类型为Customer。 Dim cust6 = New Customer With .Name = “Toni Poe “,.City = “Louisville“,10.3.2 匿名类型,匿名类型使用对象初始值设定项来创建未显式定义和命名的新类型的实例,编译器会根据在对象初始值设定项列表中指定的属

8、性生成类型。 下面的代码使用对象初始值设定项声明了一个匿名类型的实例。 Dim anonymousCust = New With .Name = “Hugo Garcia“,二者唯一的语法区别在于,没有在New之后为数据类型指定名称。但是,结果却截然不同。 编译器会定义一个具有两个属性(Name和City)的新匿名类型,并使用指定的值创建该类型的实例。类型推理机制会将该示例中的Name的类型确定为字符串。,10.4 扩展方法,使用扩展方法可以从某个数据类型外部向该类型添加方法,这些方法就称为扩展方法,可以像该数据类型的普通实例方法那样进行调用。 扩展方法只能是Sub过程或Function过程,

9、必须使用System.Runtime.CompilerServices命名空间中的扩展属性进行标记,并且只能在模块中声明。,扩展方法定义中的第一个参数指定方法所扩展的数据类型。 运行方法时,第一个参数被绑定到调用该方法的数据类型的实例。,下面代码演示了如何定义String类型的Print扩展方法。1 Imports System.Runtime.CompilerServices 2 3 Module StringExtensions 4 5 _ 6 Public Sub Print(ByVal aString As String) 7 Console.WriteLine(aString) 8

10、End Sub 9 10 End Module,下面代码演示了扩展方法的调用。1 Imports ConsoleApplication2.StringExtensions 2 Module Module1 3 Sub Main( ) 4 Dim example As String = “Hello“ 5 example.Print( ) 调用String类型的扩展方法Print 6 7 example.ToUpper( ) 调用普通的实例方法 8 example.ToUpper.Print( ) 9 End Sub 10 End Module,10.5 Lambda表达式,lambda表达式是

11、一种无名函数,用于计算并返回单个值,可在委托类型有效的任何地方使用。 下面代码就是一个lambda表达式的例子,该表达式递增其参数并返回值。 Function (num As Integer) num + 1,如果要多次使用函数,为了方便起见,可以将函数分配给一个变量名称。 Dim add1 = Function(num As Integer) num + 1下面代码是对该函数的调用。 Console.WriteLine(add1(5) 结果为6还可以同时声明和运行函数 Console.WriteLine(Function(num As Integer) num + 1)(5),Lambda表

12、达式的语法类似于标准函数的语法,区别如下,lambda表达式没有名称。 Lambda表达式不能有修饰符,例如,Overloads或Overrides。 Lambda表达式不使用As子句来指定函数的返回类型。相反,类型是从lambda 表达式主体计算得出的值推断而来的。例如,如果lambda表达式的主体为Where cust.City = “London“,则其返回类型为Boolean。,函数体必须是表达式,不能是语句。函数体可以包含对Function函数过程的调用,但不能包含对Sub子过程的调用。 不存在Return语句。函数返回的值是函数体中的表达式的值。 不存在End Function语句

13、。 要么所有参数都必须具有指定的数据类型,要么必须推断所有类型。 不允许使用Optional和Paramarray参数 不允许使用泛型参数。,可以看到Lambda表达式的语法限制很多,并且由于lambda表达式的使用方式,lambda表达式通常简短而不复杂。,10.6 语言集成查询LINQ,语言集成查询(LINQ)为Visual Basic添加了查询功能,并且提供了用于处理各种数据的简单而强大的功能。 LINQ引入查询作为Visual Basic语言的一部分,而不是向数据库发送要进行处理的查询或者对要搜索的每种类型的数据使用不同的查询语法,它使用与数据类型无关的统一语法。,下面的示例演示了一个

14、LINQ查询,该查询从一个集合返回客户列表,并将这些客户按地点进行分组。 1 Dim customers As List(Of Customer) = GetCustomerList( ) 2 3 Dim customersByCountry = From cust In customers _ 4 Order By cust.Country, cust.City _ 5 Group By CountryName = cust.Country _ 6 Into RegionalCustomers = Group, Count( ) _ 7 Order By CountryName 8 9 For Each country In customersByCountry 10 Console.WriteLine(country.CountryName & _ 11 “ (“ & country.Count & “)“ & vbCrLf) 12 13 For Each customer In country.RegionalCustomers 14 Console.WriteLine(vbTab & customer.CompanyName & _ 15 “ (“ & customer.City & “)“) 16 Next 17 Next,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 软件工程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报