当前位置:K88软件开发文章中心编程语言.NET.NET02 → 文章内容

Visual Basic 2010 新增功能

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 0:13:15

10 中,已通过使用 Out 修饰符将 IEnumerable 接口标记为协变:

Interface IEnumerable(Of Out T) 
 ... 
End Interface

  图 4 泛型方差示例

Option Strict On 
Public Class Form1 
 Sub Form1_Load() Handles MyBase.Load 
  Dim buttons As New List(Of Button) From 
   { 
    New Button With 
    { 
     .Name = "btnOk", 
     .Enabled = True 
    }, 
    New Button With 
    { 
     .Name = "btnCancel", 
     .Enabled = False 
    } 
   } 
 
  Dim enabledOnly = FilterEnabledOnly(buttons) 
 End Sub 
 Function FilterEnabledOnly( 
  ByVal controls As IEnumerable(Of Control) 
  ) As IEnumerable(Of Control) 
  Return From c In controls 
  Where c.Enabled = True 
 End Function 
End Class

  这意味着泛型参数 T 现在为变量(也就是说,它适用于继承关系),并且编译器将确保仅在类型来自于接口的位置使用该参数。泛型参数也可以是逆变量,这意味着它们仅在输入 位置使用。类型可实际上具有这两者。例如,前面讨论的 Func 委托既具有逆变参数(传入的内容),也具有协变参数(用于返回类型):

Delegate Function Func(Of In T, Out R)(ByVal param As T) As R

  可以在自定义接口和委托上使用 In 和 Out 修饰符。.NET Framework 4 中的许多常用接口和委托已标记为变量;常见示例包括所有 Action/Func 委托、IEnumerable(Of T)、IComparer(Of T) 和 IQueryable(Of T) 等。

  泛型方差的突出优点是:它是一项您完全无需担心的功能 – 如果它在执行工作,您将绝不会注意到它。曾经会导致编译器错误或要求调用 .Cast(Of T) 的情形在 Visual Basic 2010 中工作正常。

  改进的可选参数

  可选参数提供了一种有用的高效功能,它使开发人员能够建立更灵活的方法,并避免使用许多方法重载使类混乱不堪。在过去有一点限制,即可选参数不能为 null(或者甚至不能为任何非内部结构类型)。Visual Basic 2010 现在允许您定义任意 值类型的可选参数:

Sub DisplayOrder(ByVal customer As Customer, 
         ByVal orderID As Integer, 
         Optional ByVal units As Integer? = 0, 
         Optional ByVal backgroundColor As Color = Nothing) 
End Sub

  在此例中,units 的类型为 Nullable(Of Integer),backgroundColor 为非内容结构类型,但仍然将它们用作可选参数。Visual Basic 2010 还对泛型可选参数提供了更好的支持。

  嵌入式互操作类型

  对于执行 COM 互操作的应用程序,一个常见弱点是必须要使用主互操作程序集 (PIA)。PIA 是一种 .NET 程序集,它充当 COM 组件上的运行时可调用包装 (RCW),并具有用来标识它的唯一 GUID 。.NET 程序集与 PIA 通信,后者随后执行任何必要的封送以在 COM 和 .NET 之间移动数据。

  遗憾的是,PIA 可能会使部署变得很复杂,因为它们是需要部署到最终用户计算机的附加 DLL。它们还可能会导致版本控制问题 – 例如,如果您希望应用程序能够同时依据 Excel 2003 和 Excel 2007 工作,则将需要随应用程序一起同时部署两个 PIA。

  嵌入式互操作类型功能直接嵌入应用程序,但只会嵌入绝对必要的 PIA 中的类型和成员,因此无需将 PIA 部署到最终用户的计算机。

  若要为现有对象启用此功能(对于新引用,默认情况已启用此功能),请在解决方案资源管理器中选择引用,并在属性窗口中更改“Embed Interop Types”选项(请参见图 5)。或者,如果使用ming令行编译器进行编译,请使用 /l(或 /link)开关,而不是 /r 和 /reference。

  图 5 在解决方案资源管理器中启用嵌入式互操作类型

  启用此功能之后,应用程序将不再依赖于 PIA。事实上,如果在 Reflector 或 ildasm 中打开程序集,您将注意到实际上根本没有对 PIA 的任何引用。

  多重目标

  Visual Basic 2010 中所有功能的最突出特点是:您甚至可以在目标为 .NET Framework 2.0 至 .NET Framework 3.5 的项目中使用这些功能。这意味着,隐式行继续符、数组文本、集合初始值设定项、语句 lambda、自动实现的属性等功能将全部都可在现有项目中使用,而不必将目标重定为 .NET Framework 4。

  例外情况是嵌入式互操作类型,它依赖于只有 .NET Framework 4 中才有的类型;因此,如果将目标定为 .NET Framework 版本 2.0 至 3.5,则无法使用该功能。此外,只会采用 .NET Framework 4 中的方式对标记为变量的类型进行标记,因此,在前面的示例中,如果将目标定为版本 2.0 至 3.5,则仍然必须调用 .Cast(Of T)。不过,如果将目标定为这些早期版本,您可以建立自己的变量类型(使用 In/Out 修饰符)。

  若要更改应用程序的当前目标框架,请双击“我的项目”,单击“编译”选项卡,单击“高级编译选项”,然后从底部的组合框中进行选择。

  在从ming令行中进行编译时,实际上没有ming令行开关可启用此功能。实际上,编译器将查看哪个程序集提供了 System.Object 的定义(通常为 mscorlib)以及程序集的目标定为哪个框架,然后在输出程序集中标记该值。(编译器在生成 Silverlight 程序集时也使用这个同样的机制。)在使用 IDE 时,所有这些都是以透明方式进行的,因此通常您无需担心任何事情。

  欢迎试用

  如您所见,Visual Basic 2010 具有许多强大功能,这些功能使您能够提高工作效率,同时减少编写的代码行数,而将更多工作交给编译器来做。在本文中,我只探讨了语言功能,但 Visual Basic 2010 IDE 还有数不胜数的出色增强功能。下面列出部分增强功能:

  导航到

  突出显示引用

  从使用中生成

  更好的 IntelliSense(子字符串匹配、驼峰式大小写查找、建议模式 – 对于“首先测试”开发风ge非常有用)

  多监视器支持

  缩放

  Visual Basic 团队渴望听到您对我们改善 Visual Basic 的工作方面的反馈,因此请在 Microsoft Connect 上将您的意见和问题发送给我们。若要了解有关语言和 IDE 功能的详细信息,请查看 msdn.com/vbasic 上的内容,其中包括文章、示例和操作方法视频。当然,最佳学习方式是深入研究和使用产品,因此是安装和试用产品的时候了。


上一页  [1] [2] [3] [4] [5] 


Visual Basic 2010 新增功能