VB2010新特性
1.取消了连接符
(1)","之后
(2)"()"前后
(3)"{}"前后
(4)XML
(5)连接字符"&"后
(6)赋值符号"=","&=",":=","+=","-=","*=","/=","\=","^=","<<=",">>="后
(7)式内の二項演算子"+","-","/","*","Mod","<>","<",">","<=",">=","^",">>","<<","And","AndAlso","Or","OrElse","Like","Xor",后
(8)Is,IsNot后
(9)成员修饰符"."后
(10)XML的关键字".",".@","...",后
(11)属性标记的前后
(12)查询关键字的前后
(13)For Each的In关键字后
(14)集合的From关键字后
2.自动执行属性 - 为getter和setter省略的属性
Private _name As String 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
3.初始化数组,使用From{元素}方式给集合对象赋初始值
Dim statuses As New Dictionary(Of Integer, String) statuses.Add(1, "申请") statuses.Add(2, "科长确认") statuses.Add(3, "部长确认") statuses.Add(50, "已确认") statuses.Add(80, "返回") statuses.Add(99, "否决") Dim statuses As New Dictionary(Of Integer, String) From { {1, "申请"}, {2, "科长确认"}, {3, "部长确认"}, {50, "已确认"}, {80, "返回"}, {99, "否决"} } ' 定义 Public Class OS Public Property Version As Single Public Property Name As String End Class ……省略…… ' 变量的定义 Dim oses As New List(Of OS) From { New OS With {.Name = "Windows XP", .Version = 5.1}, New OS With {.Name = "Windows Vista", .Version = 6}, New OS With {.Name = "Windows 7", .Version = 6.1} }
4.定义多行Lambda表达式
Dim r = 20.0 Dim pi = Function(birthday As Date) If birthday.Year > 1990 AndAlso birthday.Year < 2000 Then Return 3 Else Return 3.14 End If End Function Console.WriteLine(pi(Date.Today) * r * r)
5.协变性和逆变性
协变性(协方差)意味着你可以为一个参数,一个子类型或继承自已定义类型的某些事物使用更多的派生类型,
逆变性意味着只能使用更少的类型,
因为.NET中的一切都派生自对象,因此你可以使用对象替换一个参数。
' 人 Public Class Person Public Property Name As String Public Property Age As Integer End Class ' 员共 - 继承于人 Public Class Employee Inherits Person End Class ' 顾客 - 继承于人 Public Class Customer Inherits Person End Class ' 协变性的例子,将员工(Employee)的实例赋值于人(Person) Dim sato As New Employee With {.Name = "刘英", .Age=32} Dim man As Person = sato
Class Pet Public Name As String End Class Class NameCompare Implements IComparer(Of Pet) ' ... End Class Class Dog Inherits Pet End Class Class Cat Inherits Pet End Class Module Module1 Sub Main() Dim DogNames As New SortedList(Of Dog, Object)(New NameCompare) Dim CatNames As New SortedList(Of Cat, Object)(New NameCompare) End Sub End Module ' 逆变性的例子, 'VB2008中,需要传递IComparer(Of Dog)或IComparer(Of Cat),利用逆变性传递IComparer(Of Pet)就可以
6.动态对象
' 无需定义直接读取MaxRetry属性的值 <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="MaxRetry" value ="10" /> </appSettings> </configuration> Dim appSettings As Object = New SettingManager() Console.WriteLine(appSettings.MaxRetry) ' 继承DynamicObject,重写TryGetMember方法 Public Class SettingManager Inherits DynamicObject ' Get访问属性 Public Overrides Function TryGetMember(ByVal binder As System.Dynamic.GetMemberBinder, ByRef result As Object) As Boolean result = System.Configuration.ConfigurationManager.AppSettings(binder.Name) Return True End Function End Class ' 可以动态执行属性或方法 Dim user As Object = New ExpandoObject user.Name = "赵鹏" user.Show = Sub() Console.WriteLine(user.Name) End Sub user.Show.Invoke() CType(user, IDictionary(Of String, Object)).Remove("Name")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通