Visual Basic 11推出了一些新特性,其中包括异步函数和期待已有的迭代器。
Visual Basic中的异步支持与C#中的版本一样。两者均使用相同的设计和关键字(即Async和Await),并且背后支撑这些关键字的都是.NET 4.0引入的任务并行库(Task Parallel library)。
尽管异步函数从理论上来说可以在任意地方使用,但是其主要目的还是为了防止敏感线程(sensitive thread)发生阻塞,例如,你可以在WPF或Silverlight应用程序的UI线程中使用异步函数进行文件 *** 作、服务调用或数据库请求。异步 *** 作完成后会自动回归UI线程,而不会在此期间造成阻塞。
ASP.NET线程池中的线程是另一个敏感线程的例子。一般情况下,ASP.NET会限制并发线程的数量,以防止过多的上下文切换导致性能退化。这个数量通常会设置成一个任意的基数,而后当运行时(Runtime)检测到大量阻塞时再进行增长。若改用异步、非阻塞调用,系统运行将更接近于理想的“one thread-per-core”模型。
Visual Basic 11同时支持迭代器函数(iterator function)和迭代器块(iterator block)。其中迭代器函数类似于C#中的迭代器,只是语法稍有改动。在VB中,迭代器函数必须被声明为“Iterator Function”而不仅是“Function”关键字。VB开发人员使用“YIEld [Expression]”来返回结果值,这与C#中使用“yIEld return [Expression]”不一样。
VB & C#语言组程序经理Anthony Green谈到:
Iterator关键字虽然使我们避免了对那些使用YIEld作为标识符(如金融相关的应用程序)的现存源文件造成破坏,虽然为我们提供了一个简洁的YIEld关键字而非关键字对YIEld Return,但这些并不是它出现的唯一原因。一般情况下,VB都会有一种声明风格(如XML literal、Handle和Implement)。我们认为,VB中的代码应当可以“顾名思义”,即如果一个函数是迭代器函数,那么代码就应当写明这点。当然,如果人们就把他们当做Iterator和Async函数调用,其实也能够运行。你可以从VB其他修饰符,如Readonly和writeonly属性中看到这种模式——如果属性没有Setter部分,那么从语义上就意味着它是Readonly,从而在声明时就可以为属性加上Readonly修饰符。
显式声明修饰符的另一个好处在于,我们可以提供一个更好的编辑器体验。在VB中,当你键入“Iterator Function F As Integer”时,IDE会自动为你插入“IEnumerable(Of Integer)”。类似地,如果你键入“Async Function F As Integer”,IDE会为你将“As Integer”替换成“As Task(Of Integer)”。这就像为属性添加Readonly修饰符一样,我们可以借助这些信息自动生成更优质的代码。
有趣的是,VB11还支持一种lambda表达式——迭代器块。下面的例子使用lambda表达式创建“IEnumerable(Of Integer)”对象并对其进行遍历。迭代器块还可以通过在“End Function”行结束后附加“.Invoke()”用在XML literal中。
同C#一样,Visual Basic 11也支持CallerMembername、CallerlineNumber和CallerfilePath 特性。在应用这些特性之后,编译器会自动计算出行号、文件路径等值,并将它们作为可选参数进行传递。这些特性用得最多的两处地方是日志记录和属性变更通知事件。
VB11中的其他改进包括:
引入Global命名空间,用于代码生成; 为重载函数加入可选参数,支持部分向后兼容; 消除方法签名中的ByVal关键字。IDE自动添加ByVal关键字最初是因为Visual Basic 7将默认传值方式由引用传递变为值传递。查看英文原文:http://www.infoq.com/news/2012/03/VB-11
总结以上是内存溢出为你收集整理的(VB.NET)Visual Basic 11新特性一览全部内容,希望文章能够帮你解决(VB.NET)Visual Basic 11新特性一览所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)