![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
.NET 4.0的新的特点和优点是什么?
2013-05-20
展开全部
.NET 4.0的Beta版已经和Visual Studio 2010 Beta版一起发布了。做为.NET框架的两个重头语言,C#和VB.NET之间增加了很多取长补短的新特性。本文全面的总结了这两个语言的发展前景。匿名方法的支持(VB.NET 中新引入)VB.NET新引入的另一个特性就是是内置(inline)或匿名(anonymous)方法。匿名方法这个名称是非常贴切的,因为它允许你直接定义子方法(Subs)和函数,而不用另外在你的类里面再添加一个顶层(top-level)的方法,从而使这个方法隐藏起来(也就是匿名)。匿名方法还可以访问它所在代码块的所有可用变量,这样的话,定义匿名方法时甚至可以不需要用参数就可以实现数值的传入和返回。在现在通常使用AddressOf 关键字指向一个方法的地方你都可以定义一个匿名函数,所以它最大用处可能在于事件处理,如下例所示:Dim MyTimer As New System.Timers.Timer(1000) Dim Seconds As Integer = 0 AddHandler MyTimer.Elapsed, Sub() Seconds += 1 Console.WriteLine(Seconds.ToString() & " seconds have elapsed") End Sub MyTimer.Start() Console.WriteLine("Press any key to exit") Console.ReadLine() 注意对定义器的超时事件处理程序就是内嵌的,而且这个内嵌的方法还直接访问了在它之外定义的变量。您还可以定义内嵌函数: Dim f = Function(a As Integer, b As Integer) Return a + b End Function Dim x = 10 Dim y = 20 Dim z = f(x, y) 如果一个内嵌函数在代码块的上下文语境里有意义的话,那用起来确实是很方便,但是用了它之后很有可能会影响程序的重用性。隐式续行(Implicit line continuation)(VB .NET中新引入)看C#代码时,你一眼就可以看出来语句的末尾在哪里,因为它以分号作为语句的结束符。VB也有一个语句结束符,但是它的结束符是是回车,每个语句都被假设是同一行里。如果你打想打破这个规范,那就不得不使用下划线来显示表明下一行是这个语句的继续。写过VB .NET程序的人就应该会感觉到,这种方法既麻烦,又影响代码的美观。Dim text As String = "Wouldn't it be nice" & _ "If you didn't have to" & _ "put an underscore to" & _ "continue to the next line?" 还好,现在我们再也不用这样了。VB.NET现在支持隐式结尾续行(implicit line continuation)。当编译器在某行发现一条不完整的语句时,它会自动检查下一行的内容是否包含语句的剩余部分。Dim text As String = "Wouldn't it be nice" & "If you didn't have to" & "put an underscore to" & "continue to the next line?" & "Sweet! Now you can!" 如果你还是喜欢怀旧的感觉,那也还是可以用原先的显示声明法,那种方法现在也还是可用的。并且有时候我们可以会不得不用它,因为编译器某些情况下可能无法判定下一行是不是续行。放心,这样的情况是不会经常出现的,而且如果发生这样的情况,编译器会通知你。 简化的属性语法(VB .NET新引入)简化的属性语法是另一个从C#中引入VB .NET的特性。通常属性定义看起来是这样的: 'Field Private _name As String 'Property Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property 现在可以简写成: Public Property Name() as String 这把代码行数从9行减少到1行。如果你选择了简化的这种写法,那要注意的一个问题就是你无法访问存储它的值的那块区域,这在按引用传值时会带来问题。如果发生这种情况,您可以随时恢复到用通常的写法或使用一个临时变量。数组类型判断(Array type inference)和多重数组(Jagged Arrays)(VB .NET新引入)VB.NET现在支持数组类型判断和多重数组定义语法。这意味着你在带初始值定义时不用显式地声明它的类型,编译器能自动确定它的类型。例如: Dim Numbers = {1, 1, 2, 3, 5, 8, 13, 21, 34} 当你看到这个数组时,能很快确定它是整数型的,现在编译器就像我们一样能准确作出这个判断。Dim Numbers = {1, 1, 2, 3, 5.0, 8, 13, 21, 34} 当编译器看到上面这个例子时,它会发现5.0不是一个整型数,所以数组类型就是double型。类型判断也可以用于矩阵: Dim Names = {{"Sarah", "Jane", "Mary", "Susan", "Amanda"}, {"Bob", "Joe", "Dustin", "Richard", "Nick"}} 编译器可以推断出string()是上面这个例子的类型。在多重数组中,你会遇到一些问题。你可以把一个二维矩阵当作一个每行的列数都相等的矩阵。多重数组每一行的列数则是可变的,所以它和矩阵还是有一些区别。你可能认为可以定义这样一个多重数组:Dim Names = {"Sarah", "Jane", "Mary", "Susan", "Amanda"}, "Bob", "Nick"} 但是你会发现编译器抛出错误说”数组初始化时缺少三个元素“(Array initialiser is missing 3 elements), 这是因为编译器默认把它当成矩阵看待。如果你想定义一个多重数组,那么只需要把这些行用一对大括号括起来:Dim Names = {{"Sarah", "Jane", "Mary", "Susan", "Amanda"}, {"Bob", "Nick"}} 现在编译器就能推断出来它的类型是string()(),这才是多重数组的正确类型。 From 关键字(VB.NET新引入 )既然说到了初始化,那我们就不得不说说VB .NET中新引入的From关键字。当你创建一个字典、表格或者其它由许多对象组成的对象时,都通常是先创建好这个对象本身,然后再用合适的物品去填充它。现在,有了From关键字,就不用再反复去调用Add方法了,它能自动帮我们调用Add方法以填充列表。因此,现在不用像下面这样写了:Dim Colors As New List(Of String) Colors.Add("Red") Colors.Add("Green") Colors.Add("Blue") 只用缩减到这么一点就可以了: Dim Colors As New List(Of String) From {"Red", "Green", "Blue"} 毫无疑问,它实际上也是调用了Add方法,也就是说它能在任何包含Add方法的对象上起作用。事实上,你甚至可以使用扩展方法(extension method)创建一个Add方法或重载一个Add方法,如果传入的参数和方法声明相吻合,From关键字就会用到它们。在前面的示例中,List对象有一个只需要一个参数的Add方法,参数值就是你想要加入表格的那个字符串。如果你有一个带多个参数的Add方法,那传入参数时就可以像定义矩阵一样做。下面是一个例子,演示如何使用Add方法和一个Dictionary对象。Dim Colors2 As New Dictionary(Of String, String) From { {"Red", "FF0000"}, {"Green", "00FF00"}, {"Blue", "0000FF"}} 因为Dictionary的Add方法包含两个参数,键(key)和值(value),我们在From语句里传入参数时就必须两个两个地传入一组参数。另外,在使用From关键字时一定要注意保持可读性。某些特定情况下,你可能还是会想回到用Add方法
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询