语句vb

vb net数据库编程  时间:2021-02-27  阅读:()
VisualBasic.
NET概述VB.
NET举例VB.
NET的数据类型VB.
NET程序语句其他特性VB.
NET概述VisualBasic.
NET是新一代的VisualBasic语言,它是一种简便快捷地创建基于.
NET的应用程序(包括XMLWebservices和Web应用程序)的工具.
VisualBasic.
NET具有许多功能(包括继承、接口和重载、自由线程处理和结构化异常处理、集成了.
NETFramework和公共语言运行库等),使之成为一种强大的面向对象编程语言.
VB.
NET概述VisualBasic.
NET反映了下列设计原则:它是明显的VisualBasic衍生语言.
现有的VisualBasic程序员可在非常短的时间内熟悉该语言.
它的语法和语义简单、直接且容易理解.
该语言中避免了非直观的功能.
它为开发人员提供了.
NETFramework的主要功能,而且符合框架的约定.
由于.
NETFramework显式支持多种计算机语言,因此它可在多语言环境中很好地工作.
它尽可能同VisualBasic的早期版本兼容.
在可行的条件下,VisualBasic.
NET同它的早期语言具有相同的语法、相同的语义和相同的运行时行为.
它可从VisualBasic合理地升级.
VB.
NET概述以下原则使VisualBasic原来的设计原则更加完善:它是一种在编写时尽可能安全的语言.
一般情况下,VisualBasic会尝试在语言定义中使可靠性、易用性和效率三者相互平衡.
它是一种极其友好的语言.
它生成可预知的高效代码.
它既可充当强类型语言,又可充当松散类型语言,在前者中可实现更正确的用户代码,在后者中则可实现更快的开发速度.
它支持快速的程序开发,同时兼顾可靠性.
VB.
NET举例-"HelloWorld!
"程序'A"HelloWorld!
"programinVB.
NETImportsSystemImportsMicrosoft.
VisualBasicModuleHelloSubMain()MsgBox("HelloWorld!
")'Displaymessageoncomputerscreen.
EndSubEndModuleVB.
NET举例-"HelloWorld!
"程序注释单引号(')表示此行的其余部分为注释.
可以将整行作为注释,或者可以在其他语句的结尾追加一个注释,如:MsgBox("HelloWorld!
")'Displaymessageoncomputerscreen.
Imports语句允许您在不使用全限定名的情况下引用命名空间中的类.
Module(模块)在VisualBasic中,所有的过程或函数都必须封装在类或模块中.
一个类可以有多个实例(带有成员变量和过程或函数).
然而,模块只包含过程或函数,并且不能进行实例化.
就HelloWorld应用程序来说,Hello模块包含一个过程,即Main()过程.
VB.
NET举例-"HelloWorld!
"程序输入和输出本例使用标准的VB运行时库,它在整个Microsoft.
VisualBasic命名空间内可用.
可以使用所有的Microsoft.
VisualBasic过程和属性,而无须将其导入程序.
MsgBox函数来显示包含字符串HelloWorld!
的消息框VB.
NET举例-"HelloWorld!
"程序Main过程每个VB程序必须包含一个称为Main的过程,该过程为应用程序的起始点并为应用程序提供总体控制.
当加载模块时,将调用该过程.
如果要在类中声明Main过程,必须使用Shared关键字.
在模块中,Main不必是Shared.
有四种方法可以声明Main过程,如下所示:VB.
NET举例-"HelloWorld!
"程序最简单的方法是声明一个不带参数或不返回值的Sub过程,如前面的控制台程序示例中所示:SubMain()EndSubMain还可以返回一个Integer值,操作系统将其作为程序的退出代码.
其他程序可以通过检查WindowsERRORLEVEL值来测试该代码.
若要返回退出代码,必须将Main声明为Function函数而不是Sub过程,如下所示:FunctionMain()AsInteger'Displaymessageoncomputerscreen.
MsgBox("HelloWorld!
")'Zerousuallymeanssuccessfulcompletion.
Return0EndFunctionVB.
NET举例-"HelloWorld!
"程序Main还可以采用一个String数组作为参数.
数组中的每个字符串均包含一个用于调用程序的命令行参数.
若要获取命令行参数,以如下方式声明Main:FunctionMain(ByValCmdArgs()AsString)AsIntegerDimArgNumAsIntegerIfCmdArgs.
Length>0Then'Seeifthereareanyarguments.
ForArgNum=0ToUBound(CmdArgs)'ExamineCmdArgs(ArgNum)forsettingsyouneedtohandle.
System.
Console.
WriteLine(CmdArgs(ArgNum))NextArgNumEndIfMsgBox("HelloWorld!
")'Displaymessageoncomputerscreen.
Return0'Zerousuallymeanssuccessfulcompletion.
EndFunctionVB.
NET举例-"HelloWorld!
"程序可以声明Main来检查命令行参数而不返回退出代码,如下所示:SubMain(ByValCmdArgs()AsString)'.
.
.
.
.
.
EndSubVB.
NET举例-"HelloWorld!
"程序编译和执行可以使用VisualStudio.
NET集成开发环境(IDE)或命令行来编译"HelloWorld!
"程序.
从命令行编译并运行程序使用任意一种文本编辑器创建源文件,并将其保存为名如Hello.
vb的文件.
若要调用编译器,请输入下面的命令:vbcHello.
vb若程序不包含任何编译错误,则编译器创建一个Hello.
exe文件.
若要运行程序,请输入下面的命令:HelloVB.
NET举例-"HelloWorld!
"程序从IDE编译并运行程序创建一个VisualBasic控制台应用程序项目.
将代码复制到项目中.
从"生成"菜单选择适当的"生成"命令,或按F5来生成并运行(对应于"调试"菜单中的"启动").
程序可加命名空间VB.
NET程序结构VisualBasic程序的结构编写的任何代码都必须按照以下顺序:1.
Option语句2.
Imports语句3.
Main过程(包含在类或模块中)4.
若适用,还有Class、Module和Namespace语句.
此外,一个程序可以包括条件编译语句.
这些语句可以放置在模块的任何位置.
如果以其他顺序输入语句则会产生编译错误.
VB.
NET程序结构Option语句:为后续的代码建立基本的规则,以防止语法和逻辑错误.
OptionExplicit语句:用于在文件级强制对该文件中的所有变量进行显式声明.
默认为On.
OptionStrict语句:限制隐式数据类型转换只能是"拓宽"转换.
可防止在使用不同类型的变量时发生逻辑错误和数据丢失.
默认为Off.
OptionCompare语句指定字符串进行相互比较的方法:按它们的Binary排列或Text排列.
OptionCompareBinary'Thatis,"AAA"islessthan"aaa".
OptionCompareText'Thatis,"AAA"isequalto"aaa".
OptionInfer语句(VS2008):在变量声明过程中启用局部推断类型.
默认值为On.
对于从早期版本升级的项目,默认值为Off.
可通过选项"对话框->"项目"->"VisualBasic默认值"或"项目"->"属性"->"生成"设置VS2005/VS2008中,在"工具"菜单上选择"选项".
打开"项目和解决方案"节点;选择"VB默认值";修改"OptionExplicit"设置.
VB.
NET程序结构Imports语句:允许对类和其他定义于导入命名空间的类型进行命名,而无须对它们进行限制.
Main过程:是应用程序的起始点,即运行代码时访问的第一个过程.
Class、Module和Namespace语句:类和模块占源文件代码最大的部分.
它们包含您所编写的大部分的代码(主要是Sub、Function、Method和Event语句)和变量声明以及程序运行所需的其他代码.
条件编译语句条件编译语句可以出现在模块的任何位置.
它们被设置为运行中满足某一条件时执行.
也可以将它们用于调试应用程序,因为条件代码只在调试模式中运行.
如:VB.
NET程序结构#ConstCustomerNumber=36#IfCustomerNumber=35Then'Insertcodetobecompiledforcustomer#35.
.
.
.
.
.
.
#ElseIfCustomerNumber=36Then'Insertcodetobecompiledforcustomer#36.
.
.
.
.
.
.
#Else'Insertcodetobecompiledforallothercustomers.
.
.
.
.
.
.
#EndIfVB.
NET举例2'VB.
netExampleModuleDisplayValuesInterfaceIMathFunctionFac(ByValpintTAsInteger)AsIntegerFunctionSqrt(ByValpdblTAsDouble)AsDoubleEndInterfaceVB.
NET举例2PublicClassComputerImplementsIMathPublicFunctionFac(ByValpintTAsInteger)AsIntegerImplementsIMath.
FacDimintCtAsInteger,intResAsInteger=1ForintCt=2TopintTintRes*=intCtNextReturnintResEndFunctionPublicFunctionSqrt(ByValpdblTAsDouble)AsDoubleImplementsIMath.
SqrtReturnSystem.
Math.
Sqrt(pdblT)EndFunctionEndClassVB.
NET举例2SubMain()DimobjTAsComputer=NewComputerDimintTAsIntegerintT=5System.
Console.
WriteLine("Sqrtrootof{0}:{1:f4}",intT,objT.
Sqrt(intT))EndSubEndModuleVB.
NET举例2VB.
NET的缺省参数传递方式是传值(ByValue)Implements:每个函数都必须显示标明其实现的接口成员.
函数名与接口成员可不同VB.
NET类是CTS类的一个具体表达VB大小写不敏感VB.
NET的数据类型VB.
NET支持两种类型:"值类型"和"引用类型".
值类型包括基元类型(如Char、Integer和Single)、枚举类型和结构类型.
引用类型包括类(Class)、字符串、标准模块、接口、委托和数组.
所有的类型要么是值类型,要么是引用类型,但有一种情况例外.
根类型Object是System.
Object的别名,它非常特殊,它既不是引用类型也不是值类型,Object的变量可包含值类型或引用类型.
VB.
NET的数据类型下面的示例显示了"值类型"和"引用类型"的差异:(ValRef.
vb)ImportsSystemClassClass1PublicValueAsInteger=0EndClassModuleTestSubMain()Dimval1AsInteger=0Dimval2AsInteger=val1val2=123Dimref1AsNewClass1()Dimref2AsClass1=ref1ref2.
Value=123Console.
WriteLine("Values:"&val1val2)Console.
WriteLine("Refs:"&ref1.
Valueref2.
Value)EndSubEndModuleVB.
NET的数据类型程序的输出是:Values:0,123Refs:123,123局部变量val2赋值不影响局部变量val1,因为两个局部变量同属于一种值类型(Integer类型),而一种值类型的每个局部变量都有它自己的存储.
相反,赋值ref2.
Value=123;则会影响ref1和ref2都引用的对象.
VB.
NET的数据类型-基元类型VisualBasic.
NET定义了下列基元类型:整数值类型Byte(1字节无符号整数)Short(2字节有符号整数)Integer(4字节有符号整数)Long(8字节有符号整数).
这些类型分别映射到CTS的System.
Byte、System.
Int16、System.
Int32和System.
Int64.
整型的默认值等于0.
VB.
NET的数据类型-基元类型浮点值类型Single(4字节浮点)Double(8字节浮点)这些类型分别映射到CTS的System.
Single和System.
Double.
浮点类型的默认值与文本0等效.
Decimal类型(16字节十进制值)此类型映射到CTS的System.
Decimal.
十进制的默认值与文本0D等效.
(在文本后追加文本类型字符D可将其强制转换为Decimal数据类型.
)VB.
NET的数据类型-基元类型Boolean值类型表示真值,通常为关系运算或逻辑运算的结果.
该文本属于类型System.
Boolean.
Boolean类型的默认值等于False.
Date值类型,表示日期和/或时间,映射到System.
DateTime.
Date类型的默认值等于#01/01/000112:00:00AM#.
Char值类型,表示单个Unicode字符,映射到System.
Char.
Char类型的默认值等于常数表达式ChrW(0).
String引用类型,表示Unicode字符序列,映射到System.
String.
String类型的默认值为空引用.
VB.
NET的数据类型VB.
NET并未支持所有CTS的类型如无符号整数等.
但VB.
NET可声明这种类型:DimuintTAsSystem.
UInt32VB.
NET的数据类型-枚举枚举枚举是从System.
Enum继承的类型,象征性地表示某个基元整型的值集.
枚举的基础类型必须为一个可表示枚举中定义的所有枚举值的整型(Byte、Short、Integer或Long).
如果未显示指定基础类型,则默认值为Integer.
枚举声明语法:[特性][枚举修饰符+]Enum标识符[As整型名]枚举成员声明+EndEnumVB.
NET的数据类型-枚举下面的示例声明了一个基础类型为Long的枚举:EnumColorAsLongRedGreen=10BlueEndEnum缺省枚举值从零开始,后面的成员值加1;也可指定.
DimaAsColor=Color.
BlueConsole.
WriteLine(a)'输出11Console.
WriteLine(a.
ToString())''输出BlueVB.
NET的数据类型-结构结构结构与类的相似之处是,它们均表示可包含数据成员和函数成员的数据结构.
但与类不同的是,结构是值类型,不需要堆分配.
结构类型的变量直接包含结构的数据,而类类型变量包含数据引用,后者称为对象.
结构从System.
ValueType继承,并且不能被继承.
结构声明语法:[属性][结构修饰符+]Structure标识符[类型Implements子句+][结构成员声明+]EndStructure行结束符如:StructurePointPublicx,yAsIntegerPublicSubNew(xAsInteger,yAsInteger)Me.
x=xMe.
y=yEndSubEndStructureVB.
NET的数据类型-类类类是可以包含数据成员、函数成员以及嵌套类型的数据结构,其中数据成员包括常数、变量和事件,函数成员包括方法、属性、索引器、运算符和构造函数.
类类型支持单一继承,可实现多接口.
类为引用类型.
类声明语法:[特性][类修饰符+]Class标识符[类基][类型Implements子句+][类成员声明+]EndClass行结束符(举例exam)VB.
NET在2003版中不支持操作符重载VB.
NET在2005版中支持操作符重载VB.
NET的数据类型-类与类有关的一些关键字VB.
NETC#OverridablevirtualNotOverridableFinalMustOverridesAbstract(用于方法)MustInheritAbstract(用于类)NotInheritableSealedVB.
NET的数据类型-标准模块标准模块标准模块为引用类型,其成员隐式地为Shared,而且成员范围为标准模块包含命名空间的声明空间,而不仅是标准模块声明本身.
标准模块永远不能实例化.
即声明标准模块类型的变量是无效的.
命名空间中的多个标准模块可以定义具有特定名称的成员;对任何模块外部的名称进行非限定引用都是多义的.
模块只能在命名空间中声明,而且不能嵌套在其他类型中.
标准模块不能实现接口,它们隐式地从Object派生,而且它们只有Shared构造函数.
VB.
NET的数据类型-标准模块标准模块声明语法:[特性][访问修饰符]Module标识符[模块成员声明+]EndModule如:PublicModuleModule1'Addclasses,properties,methods,fields,andeventsforthismodule.
EndModule模块使用举例:VB.
NET的数据类型-标准模块ImportsSystemImportsMicrosoft.
VisualBasicModuletestSubMain()test2.
t()endsubEndModuleModuletest1subt()msgbox("123")endsubEndModuleModuletest2subt()msgbox("456")endsubEndModuleVB.
NET的数据类型-接口接口接口是其他类型为确保它们支持某些操作而实现的引用类型.
接口从不直接创建而且没有实际的表示形式,其他类型必须转换为接口类型.
一个接口定义一个协定.
实现接口的类或结构必须遵守其协定.
接口可以包含方法、属性、索引器和事件作为成员.
语法:[特性][接口修饰符+]Interface标识符[Inherits父接口+][接口成员声明+]EndInterfaceVB.
NET的数据类型-接口如:显示一个包含默认属性、事件E、方法F和属性P的接口:InterfaceIExampleDefaultPropertyItem(indexAsInteger)AsStringEventE()SubF(ByValValueAsInteger)PropertyP()AsStringEndInterfaceVB.
NET的数据类型-接口接口可以使用多重继承.
如:InterfaceIControlSubPaint()EndInterfaceInterfaceITextBoxInheritsIControlSubSetText(textAsString)EndInterfaceInterfaceIListBoxInheritsIControlSubSetItems(items()AsString)EndInterfaceInterfaceIComboBoxInheritsITextBox,IListBoxEndInterfaceVB.
NET的数据类型-接口类和结构可实现多个接口.
在下面的示例中,类EditBox从类Control派生,并同时实现IControl和IDataBound:InterfaceIDataBoundSubBind(bAsBinder)EndInterfacePublicClassEditBoxInheritsControl'基类的出现必须先于接口ImplementsIControlImplementsIDataBoundPublicSubPaint()ImplementsIControl.
Paint.
.
.
EndSubPublicSubBind(bAsBinder)ImplementsIDataBound.
BindEndSubEndClassVB.
NET的数据类型-数组数组数组是一种引用类型,它包含多个通过"索引"访问的变量,该索引以一对一的方式对应于数组中的变量顺序.
(与VisualBasic的早期版本不同,在VisualBasic.
NET中,数组索引的编号总是从零开始.
)数组中包含的变量(又称数组的"元素")必须具有相同的类型,该类型称为数组的"元素类型".
数组元素在数组实例创建时出现,在数组实例销毁时消失.
每个数组元素都初始化为其类型的默认值.
类型System.
Array是所有数组类型的基类型,不能实例化.
每个数组类型继承由System.
Array类型声明的成员,并且可以转换为它(和Object).
VB.
NET的数据类型-数组VisualBasic中与数组相关的关键字有:Dim、Private、Public、ReDim:声明和初始化数组IsArray:验证数组LBound、UBound:查找数组的限制Erase、ReDim:重新初始化数组VB.
NET的数据类型-数组声明数组变量数组变量的声明与其他变量的声明一样,使用Dim语句.
在变量名后加上一对或几对圆括号,即可表示它是数组.
声明单维数组变量在声明中,在变量名后添加一对圆括号,如:DimMySingleArray()AsInteger声明多维数组变量在声明中,在变量名后添加一对圆括号并将逗号置于圆括号中以分隔维数,如:DimMy4DArray(,,,)AsShort'Four-dimensionalarray.
声明交错数组变量在声明中,在变量名后添加的圆括号对数与嵌套数组的级数相同,如:DimMyJaggedArray()()()AsByte'ArrayofarraysofBytearrays.
VB.
NET的数据类型-数组初始化数组可以将一个数组变量初始化为声明的一部分.
在声明语句中可以进行下列操作之一:在变量名后跟的圆括号中指定一个或几个维度的初始长度,不必为变量分配数组对象.
'CurrentlycontainsNothing(noobject).
DimBA1(2)AsByte使用New子句为变量分配数组对象.
使用New子句时,其后必须跟随花括号({}),即使当它们为空时也是如此.
'EmptyBytearrayobject.
DimBA2()AsByte=NewByte(){}VB.
NET的数据类型-数组初始化数组(续)为变量分配一个数组对象,并在New子句中提供初始长度.
DimBA3()AsByte=NewByte(2){}为变量分配数组对象并在New子句中提供初始元素值.
可以在同一New子句中同时提供长度与值.
'(0)through(2).
DimBA4()AsByte=NewByte(){0,1,2}'(0)through(2).
DimBA5()AsByte=NewByte(2){0,1,2}'(0)through(2).
DimBA6()AsByte={0,1,2}VB.
NET的数据类型-数组下列错误:'INVALID(Newafterlengthspecified).
DimBA1(2)AsByte=NewByte'INVALID(missingbraces).
DimBA2()AsByte=NewByte'INVALID(missingbraces).
DimBA3()AsByte=NewByte(2)VB.
NET的数据类型-数组以类似方法可以初始化多维数组变量.
如下面的示例声明将一个两维数组变量声明为2行2列的Short型数组,第一个参数表示行;第二个参数表示列.
DimS2X21(1,1)AsShort'(0)through(1),(0)through(1).
DimS2X22(,)AsShort=NewShort(Emptyarrayobject.
DimS2X23(,)AsShort=NewShort(1,1){}'Elementshavedefaultvalue.
DimS2X24(,)AsShort=NewShort(,){{5,6},{7,8}}'Fourelements.
下面初始化多维数组错误:DimS2X25(1,1)AsShort=NewShort(,)'INVALID(Newafterlengths).
DimS2X26(,)AsShort=NewShort(,)'INVALID(missingbraces).
DimS2X27(,)AsShort=NewShort(1,1)'INVALID(missingbraces).
VB.
NET的数据类型-数组当初始化一个交错数组变量时,只能指定顶级数组的维度长度.
下面的示例声明说明了一个Byte元素数组中的一个数组的有效和无效语法:'ArrayoftwoarraysofByteelements.
DimJB(1)()AsByte'INVALID(canonlyspecifytop-levelsize).
DimJB(1)(1)AsByte'INVALID(Newafterlengths).
DimJB(1)()AsByte=NewByte()()'Emptyarrays.
DimJB()()AsByte={NewByte(){},NewByte(){}}'Defaultvalues.
DimJB()()AsByte={NewByte(1){},NewByte(1){}}DimJB()()AsByte={NewByte(){5,6},NewByte(){7,8}}VB.
NET的数据类型-数组举例创建一个整数一维数组,初始化数组元素并将它们分别输出:ModuleTestSubMain()Dimarr(5)AsIntegerDimiAsIntegerFori=0Toarr.
GetUpperBound(0)arr(i)=i*iNextiFori=0Toarr.
GetUpperBound(0)Console.
WriteLine("arr("&iarr(i))NextiEndSubEndModuleVB.
NET的数据类型-数组举例程序输出结果如下:arr(0)=0arr(1)=1arr(2)=4arr(3)=9arr(4)=16arr(5)=25VB.
NET的数据类型-数组IsArray函数返回一个Boolean值,指示变量是否指向数组.
如:'Declarearrayvariables.
DimMyArray(4),YourArray(3)AsIntegerDimMyStringAsStringDimMyCheckAsBooleanMyCheck=IsArray(MyArray)'ReturnsTrue.
MyCheck=IsArray(YourArray)'ReturnsTrue.
MyCheck=IsArray(MyString)'ReturnsFalse.
VB.
NET的数据类型-数组LBound函数返回数组的指示维度的最小可用下标.
由于数组下标从0开始,因此每一维度最小可用的下标总是为0.
UBound函数返回数组的指示维度的最大可用下标.
如:DimHighest,MyArray(10,15,20),AnyArray(6)asIntegerHighest=UBound(MyArray,1)'Returns10.
Highest=UBound(MyArray,3)'Returns20.
Highest=UBound(AnyArray)'Returns6.
VB.
NET的数据类型-数组Erase语句用来释放数组变量和解除分配用于它们的元素的内存.
本示例使用Erase语句清除两个数组并释放其内存(分别保存有1000和100存储元素).
DimInt3DArray(9,9,9),Int2DArray(9,9)AsInteger'.
.
.
EraseInt3DArray,Int2DArrayReDim语句在过程级用于重新分配数组变量的存储空间.
ReDim语句可包含Preserve关键字,如包含表示当仅更改最后一个维度的大小时,保留现有数组中的数据.
DimIntArray(10,10,10)AsInteger'.
.
.
ReDimPreserveIntArray(10,10,20)'.
.
.
ReDimPreserveIntArray(10,10,15)VB.
NET的数据类型-委托委托委托是一种引用类型,它引用类型的Shared方法或对象的实例方法.
在其他语言中,与委托最接近的是函数指针,但函数指针只能引用Shared函数,而委托可以引用Shared和实例方法.
在后一种情况中,委托不仅存储对方法入口点的引用,还存储对用于调用方法的对象实例的引用.
(举例:exam1)VB.
NET的数据类型-泛型如:PublicClassclassHolder(Oft)PublicSubprocessNewItem(ByValnewItemAst)DimtempItemAst'Insertcodethatprocessesanitemofdatatypet.
EndSubEndClass其中,t是一个类型参数.
在代码中的其他地方,可以通过为t提供不同的数据类型来声明不同版本的classHolder.
如:PublicintegerClassAsNewclassHolder(OfInteger)FriendstringClassAsNewclassHolder(OfString)上面的语句声明了构造类,在这些类中,特定的类型替换了类型参数.
此类替换会传播到构造类中的代码内.
VB.
NET的语句语句表示可执行代码.
块声明语句With语句SyncLock语句事件语句赋值语句调用语句条件语句循环语句异常处理语句控制流语句数组处理语句VB.
NET的语句-块语句块由标记行组成.
每个标记行都以可选的标签声明开始,后跟用冒号分隔的零个或多个语句.
如:Swap:t=a:a=b:b=t标签具有自己的声明空间,并不影响其他标识符.
如下例将x既用作参数,又用作标签.
FunctionF(xAsInteger)AsIntegerIfx>=0ThenGoToxEndIfx=-xx:ReturnxEndFunctionVB.
NET的语句-块标签的范围是方法体.
因为标签和语句都用冒号分隔,所以标签声明可能看起来像语句;在所有多义性情况中,标签声明总是优先.
如:dima,t,basintegera=5:b=10gotoa.
.
.
.
.
.
a:t=a:a=b:b=tConsole.
Writeline("{0},{1}",a,b)输出:10,5标签可以是标识符,也可以是整数.
块的执行从块中的第一个语句开始.
执行完语句后,按词法顺序执行下一个语句,除非语句将执行传到别处或发生异常.
声明语句声明语句命名和定义过程、变量、数组和常数.
Dim:修饰"规则变量".
Const:修饰"常数变量"(类型成员常数).
声明语法:[访问修饰符]Dim|Const标识符[As类型名]=常数表达式如:ConstMyVarAsInteger=459PublicConstMyStringAsString="HELP"VB.
NET的语句-With语句With语句允许在不必多次指定一个表达式的情况下多次引用该表达式的成员.
语法:With表达式[块]EndWith如:WithMyLabel.
Height=2000.
Width=2000.
Text="ThisisMyLabel"EndWithVB.
NET的语句-SyncLock语句在执行一个语句块前获取此块的独占锁.
语法:SyncLock表达式[块]EndSyncLock其中:表达式:必选项.
计算结果等于对象引用的表达式.
块:可选项.
获取独占锁时要执行的语句块.
SyncLock语句确保不会同时有多个线程执行该语句块.
SyncLock的最常见作用是保护数据不被多个线程同时更新.
VB.
NET的语句-SyncLock语句如:ClassCachePrivateSharedSubAdd(ByValxAsObject)SyncLockGetType(Cache)'对Cache类上锁EndSyncLock'终止SyncLock过程EndSubPrivateSharedSubRemove(ByValxAsObject)SyncLockGetType(Cache)EndSyncLockEndSubEndClassVB.
NET的语句-SyncLock语句再如:维护简单消息列表的类.
ClasssimpleMessageListPublicmessagesList()AsString=NewString(50){}PublicmessagesLastAsInteger=-1PrivatemessagesLockAsNewObjectPublicSubaddAnotherMessage(ByValnewMessageAsString)SyncLockmessagesLockmessagesLast+=1messagesList(messagesLast)=newMessageEndSyncLockEndSubEndClassVB.
NET的语句-事件语句声明用户定义的事件,用Event语句;声明了事件后,使用RaiseEvent语句引发事件.
语法:[特性][访问修饰符]Event事件名[(形参表)][Implements接口]RaiseEvent事件名[(参数表)]如:PublicClassEventSource'Declareanevent.
PublicEventLogonCompleted(ByValUserNameAsString)SubCauseEvent()'Raiseaneventonsuccessfullogon.
RaiseEventLogonCompleted("AustinSteele")EndSubEndClass事件和事件处理程序声明事件使用Event关键字在类、结构、模块和接口内部声明事件,如:EventAnEvent(ByValEventNumberAsInteger)引发事件使用RaiseEvent语句引发事件,如:RaiseEventAnEvent(EventNumber)必须在声明事件的范围内引发事件.
例如,派生类不能引发从基类继承的事件.
事件和事件处理程序关联事件与事件处理程序(事件发生时调用的过程)WithEvents语句和Handles子句常常是事件处理程序的最佳选择.
在即将进行事件处理的模块的声明部分,用WithEvents关键字声明事件源(能引发事件的对象)的对象变量,如以下示例所示:PublicWithEventsClassInstAsClass1在代码编辑器中,从左边的"类名"下拉列表里选择刚声明的WithEvents变量.
从右边的"方法名称"下拉列表选择要处理的事件.
代码编辑器用一个Handles子句创建空事件处理程序过程.
Handles关键字用于声明处理指定的事件的过程.
注意此步骤为可选项.
只要创建的过程是子例程,有与处理中的事件匹配的正确参数列表,有指定正在处理的事件的Handles子句,就可以手动创建事件处理程序过程.
事件和事件处理程序使用提供的参数给事件处理程序过程添加事件处理代码.
以下代码提供了一个示例:PublicSubClassInst_AnEvent(ByValEventNumberAsSystem.
Integer)HandlesClassInst.
AnEventMessageBox.
Show("Receivedeventnumber:"&CStr(EventNumber))EndSub(举例:Exam1)VisualBasic.
NET还提供了另一种处理事件的方法:AddHandler语句.
AddHandler和RemoveHandler允许动态地启动和停止特定事件的事件处理.
事件和事件处理程序用AddHandler处理事件声明类的对象变量,该变量是您要处理的事件源.
不像WithEvents变量,此变量可以是过程中的本地变量;例如:DimCIAsNewClass1()用AddHandler语句指定事件发送器的名称,用AddressOf语句提供事件处理程序的名称;例如:AddHandlerCI.
AnEvent,AddressOfEhandler只要支持处理中的事件的正确参数,任何过程都能用作事件处理程序.
给事件处理程序添加代码,如以下示例中所示:PublicSubEHandler(ByValEventNumberAsInteger)MessageBox.
Show("Receivedeventnumber"&CStr(EventNumber))EndSub事件和事件处理程序使用RemoveHandler停止处理事件可以使用RemoveHandler语句动态地断开事件与事件处理程序过程之间的连接.
用RemoveHandler语句指定事件发送器的名称,用AddressOf语句提供事件处理程序的名称.
RemoveHandler语句的语法将与用于启动事件处理的AddHandler语句紧密匹配,例如:RemoveHandlerCI.
AnEvent,AddressOfEhandler(举例)VB.
NET的语句-赋值语句将表达式的值赋给变量.
分:简单赋值语句、复合赋值语句、委托赋值语句和Mid赋值语句.
VB.
NET的语句-简单赋值语句简单赋值语句在变量中存储表达式的结果.
表达式的类型必须可以隐式转换为变量的类型.
语法:变量表达式=表达式语句如:x=42x=y+z+MyFunction(3)DimxAsStringx="Stringvariableassignment"x="Con"&"cat"&"enation"'xequals"Concatenation".
DimxAsBooleanx=Truex=45>1003'xequalsFalse.
x=45>1003Or45>17'xequalsTrue.
MyTextBox.
Text="This"&"isa"&"String"'MyTextBox.
Text="ThisisaString".
VB.
NET的语句-复合赋值语句如果赋值运算符是一个复合赋值运算符(一个二元运算符后跟一个等号),则VOP=E形式的赋值语句(其中OP是有效的二元运算符)转换为V=VOPE.
语法:变量表达式复合二元运算符=表达式语句复合二元运算符有:如:x+=1DimxAsString="My"x&="String"'xequals"MyString".
VB.
NET的语句-委托赋值语句如果赋值语句包含关键字AddressOf,则赋值语句右侧的表达式必须为调用目标,并且变量的类型必须是同调用目标兼容的委托.
D=E形式的委托赋值语句转换为D=NewT(E),其中T是D的委托类型.
语法:变量表达式=AddressOf调用目标表达式VB.
NET的语句-Mid赋值语句Mid赋值语句将一个字符串赋给另一个字符串.
语法:Mid[$](变量表达式,表达式[,表达式])=表达式如:DimMyStringAsStringMyString="Thedogjumps"'Initializesstring.
Mid(MyString,5,3)="fox"'MyString="Thefoxjumps".
Mid(MyString,5)="cow"'MyString="Thecowjumps".
Mid(MyString,5)="cowjumpedover"'MyString="Thecowjumpe".
Mid(MyString,5,3)="duck"'MyString="Theducjumpe".
VB.
NET的语句-调用语句调用语句调用以可选的关键字Call开头的方法.
调用语句的处理方法与函数调用表达式相同.
语法:[Call]调用表达式如:'CallaSubprocedure.
CallPrintToDebugWindow("HelloWorld")'TheabovestatementpassescontroltothefollowingSubprocedure.
SubPrintToDebugWindow(ByValAnyStringAsString)Debug.
WriteLine(AnyString)'PrinttotheOutputwindow.
EndSub'CallaVisualBasicrun-timefunction(Shell),discardthereturnvalue.
CallShell("C:\WINNT\system32\calc.
exe",AppWinStyle.
NormalFocus)VB.
NET的语句-条件语句条件语句允许根据运行时计算的表达式有条件地执行语句.
If.
.
.
Then.
.
.
Else语句语法:If.
.
.
ThenIf.
.
.
Then.
.
.
Else如:DimAlertLabelAsNewSystem.
Windows.
Forms.
Label'.
.
.
SubAlertUser(ByValValueAsLong)IfValue=0ThenAlertLabel.
ForeColor=Color.
RedElseAlertLabel.
Forecolor=Color.
BlackEndIfEndSubVB.
NET的语句-条件语句Select.
.
.
Case语句根据表达式的值,执行若干组语句中的某一组.
Select[Case]基本数据类型表达式[Case表达式子句列表[语句块]][CaseElse[语句块]]EndSelect其中,表达式子句列表表示基本数据类型表达式的匹配值.
多个表达式子句以逗号隔开.
每个子句可以采取下面的某一种形式:表达式1To表达式2[Is]比较操作符表达式表达式SelectCase语句可以嵌套.
每个嵌套的SelectCase语句必须有相应的EndSelect语句.
如:VB.
NET的语句-条件语句SelectPerformanceCase1'Performanceis1.
ReturnSalary*0.
1Case2,3'Performanceis2or3.
ReturnSalary*0.
09Case5To7'Performanceis5,6,or7.
ReturnSalary*0.
07Case4,8To10'Performanceis4,8,9,or10.
ReturnSalary*0.
05CaseIs14.
Return0EndSelectVB.
NET的语句-循环语句循环语句允许语句的重复执行.
包括:While语句、DoLoop语句、For语句、ForEach语句VB.
NET的语句-While语句语法:While布尔表达式[块]EndWhile如:DimCounterAsInteger=0DimNumberAsInteger=10WhileNumber>6Number=Number-1Counter=Counter+1EndWhileMsgBox("Theloopran"&Counter&"times.
")'Runs4times.
VB.
NET的语句-Do.
.
.
Loop语句当某个Boolean条件为True时或在该条件变为True之前,重复某个语句块.
语法:Do[While|Until]布尔表达式[语句块][ExitDo][语句块]Loop或Do[语句块][ExitDo][语句块]Loop[While|Until]布尔表达式如:VB.
NET的语句-Do.
.
.
Loop语句DimCheckAsBoolean=TrueDimCounterAsInteger=0Do'Outerloop.
DoWhileCounterVB.
NET的语句-For.
.
.
Next语句将一组语句重复执行指定的次数.
语法:For循环控制变量[As数据类型]=表达式To表达式[Step表达式][语句块][ExitFor][语句块]Next[Next表达式列表]如:VB.
NET的语句-For.
.
.
Next语句例:创建字符串,字符串包含十个从0到9的数字,字符串之间用一个空格隔开.
DimWords,DigitAsIntegerDimMyStringAsStringForWords=10To1Step-1'Setup10repetitions.
ForDigit=0To9'Setup10repetitions.
'Appendnumbertostring.
MyString=MyString&CStr(Digit)NextDigit'Incrementcounter.
MyString=MyString&""'Appendaspace.
NextWordsVB.
NET的语句-ForEach.
.
.
Next语句对于集合中的每个元素重复一组语句.
语法:ForEach循环控制变量[As数据类型]In表达式语句[语句块][ExitFor][语句块]Next[变量表达式]如:VB.
NET的语句-ForEach.
.
.
Next语句例:查找"Hello"字符串DimFoundAsBoolean=FalseDimMyCollectionAsNewCollection'Iteratethroughelements.
ForEachMyObjectAsObjectInMyCollection'IfTextequals"Hello"IfCStr(MyObject.
Text)="Hello"ThenFound=True'SetFoundtoTrue.
ExitFor'Exitloop.
EndIfNextVB.
NET的语句-异常处理语句VisualBasic.
NET支持结构化异常处理和非结构化异常处理.
一个方法中只能使用一种风格的异常处理,但结构化异常处理和非结构化异常处理都可以使用Error语句.
如果方法同时使用两种风格的异常处理,则将发生编译时错误.
VB.
NET的语句-结构化异常处理语句程序通过执行Throw语句指示异常条件已经发生.
结构化异常处理通过Try语句完成.
可以在Try语句中捕获Throw语句所引发的异常.
如:VB.
NET的语句-结构化异常处理语句ModuleTestSubF()TryG()CatcheAsExceptionConsole.
WriteLine("ExceptioninF:"&e.
Message)e=NewException("F")'Re-throwhere.
ThroweEndTryEndSubSubG()ThrowNewException("G")EndSubVB.
NET的语句-结构化异常处理语句SubMain()TryF()CatcheAsExceptionConsole.
WriteLine("ExceptioninMain:"&e.
Message)EndTryEndSubEndModule原始异常被重新引发,因此程序的输出如下:ExceptioninF:GExceptioninMain:FVB.
NET的语句-非结构化异常处理语句非结构化异常处理由三个语句实现:Error语句、OnError语句和Resume语句.
如:SubTestSubOnErrorGoToErrorHandler'Codethatmayormaynotcontainerrors.
ERROR11'Simulatethe"Divisionbyzero"ExitSubErrorHandler:'Codethathandleserrors.
ResumeEndSubVB.
NET的语句-控制流语句控制流语句修改程序的执行流.
有五种控制流语句:GoTo语句:将执行传给方法中的指定标签.
Exit语句:将执行传给指定类型的、直接包含块语句末尾的下一个语句.
如果块为方法块,执行传回调用方法的表达式.
Stop语句:导致发生调试异常.
End语句:导致程序终止.
Return语句:将执行返回调用方法的表达式.
如果方法是一个子例程,该语句等效于ExitSub语句但不能提供任何表达式.
如果方法是一个函数,则必须提供可以隐式转换为函数返回类型的表达式;这种形式等效于给函数的返回局部变量赋值,然后执行ExitFunction语句.
VB.
NET的语句-数组处理语句两种语句简化了数组的处理:ReDim语句和Erase语句.
ReDim语句实例化新数组.
在过程级用于重新分配数组变量的存储空间.
ReDim语句用来更改已被正式声明的数组的一个或多个维度的大小.
但无法更改该数组的秩(维度数目).
ReDim语句无法更改数组变量的数据类型,或无法提供数组元素的新初始化值.
ReDim释放现有数组并且创建具有相同秩的新数组.
除非指定Preserve,否则新数组的元素初始化成它们的数据类型的默认值.
VB.
NET的语句-数组处理语句下例用ReDim语句分配和重新分配数组变量的存储空间.
DimI,MyArray()AsInteger'声明变量和数组变量ReDimMyArray(5)'Allocate6elements.
ForI=0ToUBound(MyArray)MyArray(I)=I'Initializearray.
NextI'下一个语句重新调整该数组的大小,而不保存该元素的内容.
ReDimMyArray(10)'Resizeto11elements.
ForI=0ToUBound(MyArray)MyArray(I)=I'Initializearray.
NextI'下面的语句重新调该整数组的大小,且保存该元素的内容.
ReDimPreserveMyArray(15)'Resizeto16elements.
VB.
NET的语句-数组处理语句Erase语句用来释放数组变量和解除分配用于它们的元素的内存.
如:使用Erase语句清除两个数组并释放其内存(分别保存有1000和100存储元素).
然后,ReDim语句将新的数组实例赋给其中的三维数组.
DimInt3DArray(9,9,9),Int2DArray(9,9)AsInteger'.
.
.
EraseInt3DArray,Int2DArray'.
.
.
ReDimInt3DArray(4,4,9)VB.
NET的其他特性–特性VB.
NET程序可以包含特性ImportsSystem_PublicClassHelpAttributeInheritsAttributePublicSubNew(urlValueAsString)Me.
urlValue=urlValueEndSubPublicTopicAsString=NothingPrivateurlValueAsStringPublicReadOnlyPropertyUrl()AsStringGetReturnurlValueEndGetEndPropertyEndClassVB.
NET的其他特性-特性下面的示例显示了特性的若干用法:_PublicClassClass1_PublicSubF()EndSubEndClassVB.
NET的其他特性-特性下例程序片段查Class1是否具有Help特性;如有,则写出关联的Topic和Url值.
DimtypeAsType=GetType(Class1)DimarrAsObject()=type.
GetCustomAttributes(GetType(HelpAttribute),true)Ifarr.
Length=0ThenConsole.
WriteLine("Class1hasnoHelpattribute.
")ElseDimhaAsHelpAttribute=CType(arr(0),HelpAttribute)Console.
WriteLine("Url="&ha.
Url&"Topic="&ha.
Topic)EndIf举例数字钟在窗体上显示当前时间模拟秒表窗体上有一个显示屏:显示0.
00,三个按键:"开始"、"暂停"、"结束".
初始时,"暂停"、"结束"键不可用.
要求:当按下"开始"时,开始计时,显示屏显示计时信息,"暂停"、"结束"键可用,"开始"键不可用;按下"暂停"键时,显示屏计时信息暂停显示,但计时仍继续,"暂停"键变成"继续"键;按下"继续"键时,显示屏恢复显示按"开始"键以来的计时信息,"继续"键变成"暂停"键;按下"结束"键,计时停止,"结束"键变成"归零"键,"继续"或"暂停"键不可用.
单击"归零"键,回到初始状态做一个"闹钟"类,要求可在指定时间或在指定时间段产生"时间到"事件

【IT狗】在线ping,在线tcping,路由追踪

IT狗为用户提供 在线ping、在线tcping、在线路由追踪、域名被墙检测、域名被污染检测 等实用工具。【工具地址】https://www.itdog.cn/【工具特色】1、目前同类网站中,在线ping 仅支持1次或少量次数的测试,无法客观的展现目标服务器一段时间的网络状况,IT狗Ping工具可持续的进行一段时间的ping测试,并生成更为直观的网络质量柱状图,让用户更容易掌握服务器在各地区、各线...

数脉科技:六月优惠促销,免备案香港物理服务器,E3-1230v2处理器16G内存,350元/月

数脉科技六月优惠促销发布了!数脉科技对香港自营机房的香港服务器进行超低价促销,可选择30M、50M、100Mbps的优质bgp网络。更大带宽可在选购时选择同样享受优惠,目前仅提供HKBGP、阿里云产品,香港CN2、产品优惠码续费有效,仅限新购,每个客户可使用于一个订单。新客户可以立减400元,或者选择对应的机器用相应的优惠码,有需要的朋友可以尝试一下。点击进入:数脉科技官方网站地址数脉科技是一家成...

Spinservers:美国圣何塞机房少量补货/双E5/64GB DDR4/2TB SSD/10Gbps端口月流量10TB/$111/月

Chia矿机,Spinservers怎么样?Spinservers好不好,Spinservers大硬盘服务器。Spinservers刚刚在美国圣何塞机房补货120台独立服务器,CPU都是双E5系列,64-512GB DDR4内存,超大SSD或NVMe存储,数量有限,机器都是预部署好的,下单即可上架,无需人工干预,有需要的朋友抓紧下单哦。Spinservers是Majestic Hosting So...

vb net数据库编程为你推荐
微信对骂群微信团队发来的让文明使用微信是什么意思?阿里云系统阿里云系统怎么样好用吗?邮箱怎么写工作邮箱怎么填伪装微信地理位置什么软件可以伪装QQ微信的地理位置?简体翻译成繁体简体中文转换成繁体怎么转换?godaddyGO DADDY服务器空间域名怎么样怎么点亮qq空间图标QQ空间图标怎么点亮?idc前线求电影敢死队电影里的歌曲!bluestack安卓模拟器bluestacks怎么用?如何快速收录如何让百度快速收录
免费域名 西安域名注册 西安电信测速 息壤主机 sub-process ixwebhosting 鲜果阅读 服务器怎么绑定域名 699美元 亚马逊香港官网 cn3 息壤代理 爱奇艺会员免费试用 免费mysql数据库 360云服务 万网空间管理 太原联通测速 我的世界服务器ip 网站防护 七十九刀 更多