Visual Basic .NET(VB 7.0)是随Visual C#和ASP.NET一起在2002年发布的最初始的VB.NET版本。C#被大力宣传为微软对付JAVA的王牌,受到媒体极力关注。然而VB.NET(有时被称为VB 7.0)影响面不广,这导致VB社区之外很少人关注它。那些试用过此版VB.NET的人在层层幕布下发现一个强大却艰深的语言,而且还有不少缺点,例如它的运行阶段组件(Run-Time)比VB6大了十倍,存储器使用量也大大增加。
VB 7.0引起了广泛的争议,主要原因在于对旧版VB的改动过大。许多资深的VB程序员抱怨VB.NET,因为VB.NET 2002丢掉了许多不再发行的VB6中使用的大量语言结构和用户界面功能,并且对保留下来的东西也改变了语意。例如,在VB.NET参数默认是以值方式传递的,而不是以引用方式。VB.NET 2002被半嘲讽半认真地称为Visual Fred或VB DOTNOT。作为对2005年3月8日微软拒绝为VB6再提供维护与支持的回应,当月月底出现了反对者的请愿
VB.NET的支持者们认为新语言在很多方面比旧版本更为强大,比如它以相比早期版本更为自然、紧密和完全的方式地加入了现代面向对象的编程范式。反对者们有不同意见,虽然VB6对对象模型支持有缺点,但是二次开发升级到VB.NET的成本比升级后的收益要高得多。而开发软件发布因特网版本的独立程序员也对VB.NET的RunTime尺寸过大不满。
针对开发者的不满,微软主要做了如下努力:使新的开发更容易启动,而把已经开发的VB6代码升级到VB.NET。例子主要包括:完成VB6中的常见任务如打印预览;集成VB6和VB.NET解决方案(dubbed VB Fusion),从VB6代码转换到VB.NET。
微软在后续版本中撤销了一些过激的更改,并且吸取了经验。在以后版本中,语法的更改变得更加谨慎。
Visual Basic .NET 2003(VB 7.0)和.NET Framework 1.1一起发布。新功能包括对.NET Compact Framework的支持和更好的VB升迁向导。并改进了运行状况,IDE稳定性(尤其是后台编译器),以及运行时RunTime稳定性。另外,VB.NET 2003还有一个学院版Visual Studio .NET 2003 Academic Edition(VS03AE),它是分发给各国某些学者免费使用的版本。
Visual Basic 2005(VB 8.0)是VB.Net的重大转变,微软决意在其软件名称中去掉了.NET部分。在VB2005中,微软增加了许多新功能,以引用VB对于初学者来说的一些优点:
主要的变动:
·不再支持“Edit and Continue” - 早期Visual Basic可以在调试时修改代码并且不经重新编译地执行。Visual Basic 2005去掉了这个功能;
·设计时表达式求值;
·提供My伪名字空间,包含了不需大量编码而访问特定.NET Framework功能的简单方式;提供了改进的VB到VB.NET转换向导;Using语法,简化了需要部署pattern to free resources的对象的使用;My编码,可隐藏由VB.NET IDE写的模板代码;数据源绑定,简化了数据库C/S开发。上述功能(尤其是My)增强了VB.Net成为快速开发应用平台的可能,并与C#进一步区别开来。Visual Basic 2005通过增加新功能而减小了和其它所谓更强大的.NET语言的差距。
·增加了.NET 2.0语言功能包括:泛型(generics)和Partial类(在一个文件里定义一个类的某部分然后在另外的文件里添加更多的定义,这个方法在集成用户书写的代码和系统自动生成的代码时尤其有用);
·XML注释,可以被NDoc等工具处理而自动生成文档;
·操作符重载;
·支持在其它语言中已经广泛使用的unsigned integer数据类型;
·支持在许多C派生编程语言已提供的复合操作符如:"+=", "-=";
·IsNot专利:If Not X Is Y表达式被转换成If X IsNot Y。当微软为IsNot申请专利时招致了恶名(尤其来自Real公司);
·Visual Basic 2005 Express:作为VS产品线上的一部分,VB2005 Express是专为业余爱好者和新手定制的免费的VS Express系列的一员。Express版本目的定位在帮助人们学习一种语言,所以他们有和标准版一致的用户界面,只是少了一些高级功能。另外,VS Express版包括了VB6.0转换器,提供了从VB老版本升级的可行方法。
Visual Basic 2008(VB 9.0)于2007年11月9日与Microsoft .NET Framework 3.5一起发布。
Visual Basic 2010于2010年4月发布。
2012年Visual Basic 2012(VB 11.0)
2013年Visual Basic 2013(VB 12.0)
Visual Basic 2015(VB 14.0)于2015年7月20日发布。
2017年Visual Basic 2017(VB 15.0)
Visual Basic .NET通常缩写为VB.NET,在某些特定情况下也直接简称VB,比如在.NET这个大话题下或者与其他.NET语言一起讨论的时候。
Visual Basic .NET属Basic系语言,其语法特点是以极具亲和力的英文单词为基础标识,以及与自然语言极其相近的逻辑表达,有时候你会觉得写VB.NET代码就好像在写英文句子一样,从这个角度来说,VB.NET似乎是最高级的一门编程语言,当然在Basic系语言中VB.NET也确实是迄今为止最强大的一门编程语言。
Visual Basic .NET的应用范围包括Windows桌面、Web以及当下突然觉醒的正在奋力追赶的第三大移动平台Windows Phone。
由于改动太大,导致VB.NET对VB的向后兼容性不好,在业界引起不小的争议。
VB.NET是"...中间解释性语言“,这种说法极不准确,甚至完全错误。可能原编辑者是指的编译器会先将源码翻译成MSIL(Microsoft Intermediate Language)中间语言这回事,但这和”解释性语言“有很大差别。
此段列出的是仅Visual Basic .Net语言部分较独特或者较重要的特性。
在Visual Basic .Net使用 Function 或 Sub 关键字创建 Lambda 表达式,就像创建标准函数或子例程一样。 但是,Lambda 表达式包括在语句中。下面分别演示单行与多行。
用Function并返回值:
用Sub:
比起其他语言,Visual Basic .Net用Function和Sub更能直观体现Lambda表达式的本质——匿名方法。
Imports System
Module Module1
'This program will display Hello World Sub Main() Console.WriteLine("Hello World") Console.ReadKey() End Sub End Module
运行结果
Hello, World!
下表列出了VB.Net保留的关键字:
AddHandler | AddressOf | Alias | And | AndAlso | As | Boolean |
ByRef | Byte | ByVal | Call | Case | Catch | CBool |
CByte | CChar | CDate | CDec | CDbl | Char | CInt |
Class | CLng | CObj | Const | Continue | CSByte | CShort |
CSng | CStr | CType | CUInt | CULng | CUShort | Date |
Decimal | Declare | Default | Delegate | Dim | DirectCast | Do |
Double | Each | Else | ElseIf | End | End If | Enum |
Erase | Error | Event | Exit | False | Finally | For |
Friend | Function | Get | GetType | GetXML Namespace |
Global | GoTo |
Handles | If | Implements | Imports | In | Inherits | Integer |
Interface | Is | IsNot | Let | Lib | Like | Long |
Loop | Me | Mod | Module | MustInherit | MustOverride | MyBase |
MyClass | Namespace | Narrowing | New | Next | Not | Nothing |
Not Inheritable |
Not Overridable |
Object | Of | On | Operator | Option |
Optional | Or | OrElse | Overloads | Overridable | Overrides | ParamArray |
Partial | Private | Property | Protected | Public | RaiseEvent | ReadOnly |
ReDim | REM | Remove Handler |
Resume | Return | SByte | Select |
Set | Shadows | Shared | Short | Single | Static | Step |
Stop | String | Structure | Sub | SyncLock | Then | Throw |
To | True | Try | TryCast | TypeOf | UInteger | While |
Widening | With | WithEvents | WriteOnly | Xor |
AddHandler | AddressOf | Alias | And | AndAlso | As | Boolean |
ByRef | Byte | ByVal | Call | Case | Catch | CBool |
CByte | CChar | CDate | CDec | CDbl | Char | CInt |
Class | CLng | CObj | Const | Continue | CSByte | CShort |
CSng | CStr | CType | CUInt | CULng | CUShort | Date |
Decimal | Declare | Default | Delegate | Dim | DirectCast | Do |
Double | Each | Else | ElseIf | End | End If | Enum |
Erase | Error | Event | Exit | False | Finally | For |
Friend | Function | Get | GetType | GetXML Namespace |
Global | GoTo |
Handles | If | Implements | Imports | In | Inherits | Integer |
Interface | Is | IsNot | Let | Lib | Like | Long |
Loop | Me | Mod | Module | MustInherit | MustOverride | MyBase |
MyClass | Namespace | Narrowing | New | Next | Not | Nothing |
Not Inheritable |
Not Overridable |
Object | Of | On | Operator | Option |
Optional | Or | OrElse | Overloads | Overridable | Overrides | ParamArray |
Partial | Private | Property | Protected | Public | RaiseEvent | ReadOnly |
ReDim | REM | Remove Handler |
Resume | Return | SByte | Select |
Set | Shadows | Shared | Short | Single | Static | Step |
Stop | String | Structure | Sub | SyncLock | Then | Throw |
To | True | Try | TryCast | TypeOf | UInteger | While |
Widening | With | WithEvents | WriteOnly | Xor |
VB.Net提供了多种数据类型。下表显示的所有数据类型可用的:
数据类型 | 存储分配 | 值范围 |
---|---|---|
Boolean | 取决于实施平台 | 真或假 |
Byte | 1个字节 | 0到255(无符号) |
Char | 2个字节 | 0〜65535(无符号) |
Date | 8个字节 | 00:00:00(午夜),时间为0001年12月31日11时31分至晚上11:59:59 |
Decimal | 16字节 | 0至+/- 79,228,162,514,264,337,593,543,950,335(+/- 7.9 ... E + 28),没有小数点; 0到+/- 7.9228162514264337593543950335,其中小数点右边有28个位 |
Double | 8个字节 | -1.79769313486231570E + 308至-4.94065645841246544E-324,对于负值4.94065645841246544E-324至1.79769313486231570E + 308,对于正值 |
Integer | 4个字节 | -2,147,483,648至2,147,483,647(有符号) |
Long | 8个字节 | -9,223,372,036,854,775,808至9,223,372,036,854,775,807(签字) |
Object | 在32位平台上的4个字节 在64位平台8字节 |
任何类型都可以存储在Object类型的变量中 |
SByte | 1个字节 | -128至127(签字) |
Short | 2个字节 | -32,768至32,767(签字) |
Single | 4个字节 | -3.4028235E + 38至-1.401298E-45为负值; 1.401298E-45至3.4028235E + 38正值 |
String | 取决于实施平台 | 0到大约20亿个Unicode字符 |
UInteger | 4个字节 | 0至4294967295(无符号) |
ULONG | 8个字节 | 0至18,446,744,073,709,551,615(签名) |
User-Defined | 取决于实施平台 | 结构的每个成员具有由其数据类型确定的范围并且独立于其他成员的范围 |
UShort | 2个字节 | 0至65,535(无符号) |
一些数据类型的程序示例及运行结果
Module DataTypes Sub Main() Dim b As Byte Dim n As Integer Dim si As Single Dim d As Double Dim da As Date Dim c As Char Dim s As String Dim bl As Boolean b = 1
n = 1234567
si = 0.12345678901234566
d = 0.12345678901234566
da = Today
c = "U"c
s = "Me"
If ScriptEngine = "VB" Then
bl = True
Else
bl = False
End If
If bl Then
'the oath taking Console.Write(c & " and," & s & vbCrLf) Console.WriteLine("declaring on the day of: {0}", da) Console.WriteLine("We will learn VB.Net seriously") Console.WriteLine("Lets see what happens to the floating point variables:") Console.WriteLine("The Single: {0}, The Double: {1}", si, d) End If Console.ReadKey() End Sub End Module
U and, Me
declaring on the day of: 12/4/2012 12:00:00 PM
We will learn VB.Net seriously
Lets see what happens to the floating point variables:
The Single:0.1234568, The Double: 0.123456789012346
数据类型 | 存储分配 | 值范围 |
---|---|---|
Boolean | 取决于实施平台 | 真或假 |
Byte | 1个字节 | 0到255(无符号) |
Char | 2个字节 | 0〜65535(无符号) |
Date | 8个字节 | 00:00:00(午夜),时间为0001年12月31日11时31分至晚上11:59:59 |
Decimal | 16字节 | 0至+/- 79,228,162,514,264,337,593,543,950,335(+/- 7.9 ... E + 28),没有小数点; 0到+/- 7.9228162514264337593543950335,其中小数点右边有28个位 |
Double | 8个字节 | -1.79769313486231570E + 308至-4.94065645841246544E-324,对于负值4.94065645841246544E-324至1.79769313486231570E + 308,对于正值 |
Integer | 4个字节 | -2,147,483,648至2,147,483,647(有符号) |
Long | 8个字节 | -9,223,372,036,854,775,808至9,223,372,036,854,775,807(签字) |
Object | 在32位平台上的4个字节 在64位平台8字节 |
任何类型都可以存储在Object类型的变量中 |
SByte | 1个字节 | -128至127(签字) |
Short | 2个字节 | -32,768至32,767(签字) |
Single | 4个字节 | -3.4028235E + 38至-1.401298E-45为负值; 1.401298E-45至3.4028235E + 38正值 |
String | 取决于实施平台 | 0到大约20亿个Unicode字符 |
UInteger | 4个字节 | 0至4294967295(无符号) |
ULONG | 8个字节 | 0至18,446,744,073,709,551,615(签名) |
User-Defined | 取决于实施平台 | 结构的每个成员具有由其数据类型确定的范围并且独立于其他成员的范围 |
UShort | 2个字节 | 0至65,535(无符号) |
VB.Net提供以下内联类型转换函数:
SN | 功能和说明 |
---|---|
1 | CBool(表达式) 将表达式转换为布尔数据类型。 |
2 | CByte(表达式) 将表达式转换为字节数据类型。 |
3 | CChar(表达式) 将表达式转换为Char数据类型。 |
4 | CDate(表达式) 将表达式转换为Date数据类型 |
5 | CDbl(表达式) 将表达式转换为双精度数据类型。 |
6 | CDec(表达式) 将表达式转换为十进制数据类型。 |
7 | CInT(表达式) 将表达式转换为整数数据类型。 |
8 | CLng函数(表达式) 将表达式转换为长数据类型。 |
9 | CObj(表达式) 将表达式转换为对象类型。 |
10 | CSByte(表达式) 将表达式转换为SByte数据类型。 |
11 | CShort(表达式) 将表达式转换为短数据类型。 |
12 | CSng函数(表达式) 将表达式转换为单一数据类型。 |
13 | CStr的(表达式) 将表达式转换为字符串数据类型。 |
14 | CUInt(表达式) 将表达式转换为UInt数据类型。 |
15 | CULng(表达式) 将表达式转换为ULng数据类型。 |
16 | CUShort(表达式) 将表达式转换为UShort数据类型。 |
一些函数功能及运行结果
Module DataTypes Sub Main() Dim n As Integer Dim da As Date Dim bl As Boolean = True
n = 1234567
da = Today
Console.WriteLine(bl)
Console.WriteLine(CSByte(bl))
Console.WriteLine(CStr(bl))
Console.WriteLine(CStr(da))
Console.WriteLine(CChar(CChar(CStr(n))))
Console.WriteLine(CChar(CStr(da)))
Console.ReadKey()
End Sub
End Module
True
-1
True
12/4/2012
1
1