Visual Basic 11新特性一览

hztltgg 2012-03-13 11:38:06
加精
http://www.infoq.com/cn/news/2012/03/VB-11

作者 Jonathan Allen 译者 曹如进 发布于 2012年3月11日

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将默认传值方式由引用传递变为值传递。
...全文
4663 90 打赏 收藏 转发到动态 举报
写回复
用AI写文章
90 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangzn76 2012-04-15
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 的回复:]
我只感觉用VB.NET的都是高手,其余的不知道。
[/Quote] 不会哦。我只感觉 会vb.net 至少 看得懂C# ,反之 会C# 不一定看得懂vb
Aries_0219 2012-03-23
  • 打赏
  • 举报
回复
laviewpbt 2012-03-22
  • 打赏
  • 举报
回复
支持VB6
jygongweibin 2012-03-22
  • 打赏
  • 举报
回复
对组件的支持还不好 小程序装个组件要几十M
apples20008 2012-03-21
  • 打赏
  • 举报
回复
支持vb,简单好用
clarkzhao1007 2012-03-21
  • 打赏
  • 举报
回复
好!都没发现这些 楼主太棒了
yangzn76 2012-03-20
  • 打赏
  • 举报
回复
好像 winxp 装不起这个版本了,不过还是支持一下。
cnwin 2012-03-20
  • 打赏
  • 举报
回复
了解了.谢谢!
blackkettle 2012-03-20
  • 打赏
  • 举报
回复
不错。顶一下!
laichunlin 2012-03-20
  • 打赏
  • 举报
回复
用过vb6.0,学习了!
hztltgg 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 70 楼 bonlog 的回复:]
不是,楼主说的是vb.net还是vb?
我只是在大三时学过几天vb 6.0,你说的vb 11是不是,可以拖出一个form窗体之类的东西?也可改个名子,如caption
[/Quote]

vb6是你学的vb的一个终结版了,vb7以后已经更新换代,基于.net,当然也可以拖出一个form窗体,caption属性现在一般都是用text属性代替了。
  • 打赏
  • 举报
回复
vb11啊,这么多年后vb终于有点接近c#了。vb/net设计者为什么总是故意很落后于c#呢?唉
  • 打赏
  • 举报
回复
[Quote=引用楼主 hztltgg 的回复:]
•消除方法签名中的ByVal关键字。IDE自动添加ByVal关键字最初是因为Visual Basic 7将默认传值方式由引用传递变为值传递。
[/Quote]

这是借口。

ide强行添加byval关键字最初应该是因为vb7想不通.net的传值方式传送引用变量的理念,现在终于屈服了。
AUTWINDX 2012-03-17
  • 打赏
  • 举报
回复
好久没动过程序了,外星人来了。
bonlog 2012-03-17
  • 打赏
  • 举报
回复
不是,楼主说的是vb.net还是vb?
我只是在大三时学过几天vb 6.0,你说的vb 11是不是,可以拖出一个form窗体之类的东西?也可改个名子,如caption


starblazing 2012-03-16
  • 打赏
  • 举报
回复
只用过VB6
winsontam2011 2012-03-16
  • 打赏
  • 举报
回复
很不错
东方之珠 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 60 楼 l_g_guo 的回复:]
VB功能是越来越强,应用也越来越方便,但有一点很纠结,就是编个小程序,只有几百K大小,而组件却要40多M。不知有哪位高手有办法,只提取有用的组件,而不必选择整个依赖项(40多M),以便软件交流。
[/Quote]
好像打了补丁还要大。
wood87654321 2012-03-16
  • 打赏
  • 举报
回复
止步于VB8,更新的功能均已非我所需
zhangqitao 2012-03-15
  • 打赏
  • 举报
回复
VB是什么
加载更多回复(45)
二进制文件转换,Passolo 是目前世界上最流行的软件本地化专业工具之一。它支持众多文件格式,包括可执行程序文件、资源文件和基于 XML 的文件。文本可以被翻译为多种语言,包括亚洲语系(Unicode 码)以及书写方式为从右向左的语言,比如希伯来语和阿拉伯语。 可用 Passolo 本地化的文件格式一览表 Windows 标准资源 (32 位和 64 位)二进制文件 (EXE, DLL, OCX, SYS...)Windows 标准资源 (16 位,比如 Windows 3.1) 二进制文件 (EXE, DLL, SYS...)Windows 标准资源RC 文件 (RC, RC2, DLG...) Windows CE, Pocket PC 移动设备二进制文件 (EXE, DLL...) * XML 文件 包括 XLIFF 文件 (支持 XLIFF) * Microsoft .NET 资源 (Framework 1.x 到 3.x/WPF) 二进制文件 (EXE, DLL, 程序集) 资源文件 (RESX, RESOURCE...) * Borland Delphi/C++ Builder 二进制文件 (EXE, DLL, BPL) (包括对话框和菜单编辑器) * Java 资源 (所有平台 J2EE, J2SE 和 J2ME) 属性文件,源文件,二进制文件,方案文件 * Palm 操作系统软件 * ODBC 数据库解析器 支持 ACCESS, Excel, SQL 服务器, Oracle, MySQL, IBM DB2 * Visual BASIC 6 二进制文件 * Visual BASIC 6 方案 (VBP) 和窗体 (FRM) 支持 WYSIWYG 编辑器以及从代码中提取文本 * 通用文本文件解析器 支持许多不同的文件格式和编码 * 可移植对象文件 (PO) 解析器 * Microsoft Installer 文件解析器 支持所有 MSI 文件中的表 * Microsoft Excel 文件解析器 支持所有 Excel 文件中的表单 * XLIFF 配置文件 WYSIWYG 编辑器给 Windows 资源 * 用户定义的文件格式 高度结构化的文本文件和二进制文件

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧