目录

VB.Net - 快速指南

VB.Net - Overview

Visual Basic .NET(VB.NET)是一种在.NET Framework上实现的面向对象的计算机编程语言。 虽然它是经典Visual Basic语言的演变,但它不与VB6向后兼容,并且用旧版本编写的任何代码都不能在VB.NET下编译。

与所有其他.NET语言一样,VB.NET完全支持面向对象的概念。 VB.NET中的所有东西都是一个对象,包括所有原始类型(Short,Integer,Long,String,Boolean等)和用户定义的类型,事件甚至程序集。 所有对象都继承自基类Object。

VB.NET由Microsoft的.NET框架实现。 因此,它可以完全访问.Net Framework中的所有库。 它也可以在Mono上运行VB.NET程序,Mono是.NET的开源替代品,不仅在Windows下,甚至在Linux或Mac OSX上。

以下原因使VB.Net成为一种广泛使用的专业语言 -

  • 现代,通用。

  • 面向对象。

  • 面向组件。

  • 简单易学。

  • 结构化语言。

  • 它产生有效的程序。

  • 它可以在各种计算机平台上编译。

  • .Net Framework的一部分。

强大的编程功能VB.Net

VB.Net拥有众多强大的编程功能,使其可以满足全球众多程序员的需求。 让我们提一下这些功能 -

  • 布尔条件

  • 自动垃圾收集

  • 标准图书馆

  • 程序集版本控制

  • 属性和事件

  • 代表和活动管理

  • 易于使用的泛型

  • Indexers

  • 条件编译

  • 简单的多线程

VB.Net - Environment Setup

在本章中,我们将讨论可用于创建VB.Net应用程序的工具。

我们已经提到VB.Net是.Net框架的一部分,用于编写.Net应用程序。 因此,在讨论运行VB.Net程序的可用工具之前,让我们了解VB.Net如何与.Net框架相关联。

.Net框架

.Net框架是一个革命性的平台,可以帮助您编写以下类型的应用程序 -

  • Windows应用程序

  • Web应用程序

  • 网页服务

.Net框架应用程序是多平台应用程序。 该框架的设计方式使其可以使用以下任何语言:Visual Basic,C#,C ++,Jscript和COBOL等。

所有这些语言都可以访问框架以及相互通信。

.Net框架由VB.Net等客户端语言使用的庞大代码库组成。 这些语言使用面向对象的方法。

以下是.Net框架的一些组件 -

  • 公共语言运行时(CLR)

  • .Net Framework类库

  • 通用语言规范

  • 普通型系统

  • 元数据和程序集

  • Windows窗体

  • ASP.Net和ASP.Net AJAX

  • ADO.Net

  • Windows Workflow Foundation(WF)

  • Windows Presentation Foundation

  • Windows Communication Foundation(WCF)

  • LINQ

对于每个组件执行的作业,请参阅ASP.Net - 简介 ,有关每个组件的详细信息,请参阅Microsoft的文档。

集成开发环境(IDE)适用于VB.Net

Microsoft为VB.Net编程提供以下开发工具 -

  • Visual Studio 2010(VS)

  • Visual Basic 2010 Express(VBE)

  • Visual Web Developer

最后两个是免费的。 使用这些工具,您可以将各种VB.Net程序从简单的命令行应用程序编写到更复杂的应用程序。 Visual Basic Express和Visual Web Developer Express版本是Visual Studio的精简版本,具有相同的外观和感觉。 它们保留了Visual Studio的大多数功能。 在本教程中,我们使用了Visual Basic 2010 Express和Visual Web Developer(用于Web编程章节)。

你可以从here下载。 它会自动安装在您的机器中。 请注意,您需要有效的互联网连接才能安装快速版。

在Linux或Mac OS上编写VB.Net程序

虽然.NET Framework在Windows操作系统上运行,但是有一些替代版本可以在其他操作系统上运行。 Mono是.NET Framework的开源版本,它包含一个Visual Basic编译器,可在多个操作系统上运行,包括各种Linux和Mac OS。 最新版本是VB 2012。

Mono的既定目的不仅是能够跨平台运行Microsoft .NET应用程序,还能为Linux开发人员带来更好的开发工具。 Mono可以在许多操作系统上运行,包括Android,BSD,iOS,Linux,OS X,Windows,Solaris和UNIX。

VB.Net - Program Structure

在我们研究VB.Net编程语言的基本构建块之前,让我们看一下最基本的VB.Net程序结构,以便我们在接下来的章节中将其作为参考。

VB.Net Hello World示例

VB.Net程序基本上由以下部分组成 -

  • 命名空间声明

  • 一个类或模块

  • 一个或多个程序

  • Variables

  • 主要程序

  • 声明和表达

  • Comments

让我们看一下打印“Hello World”字样的简单代码 -

Imports System
Module Module1
   'This program will display Hello World 
   Sub Main()
      Console.WriteLine("Hello World")
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Hello, World!

让我们看看上述程序的各个部分 -

  • Imports System程序的第一行用于在程序中包含System命名空间。

  • 下一行有一个Module声明,模块Module1 。 VB.Net完全面向对象,因此每个程序都必须包含一个类的模块,该类包含程序使用的数据和过程。

  • 类或模块通常包含多个过程。 过程包含可执行代码,换句话说,它们定义了类的行为。 程序可以是以下任何一种 -

    • Function

    • Sub

    • Operator

    • Get

    • Set

    • AddHandler

    • RemoveHandler

    • RaiseEvent

  • 下一行('此程序)将被编译器忽略,并且已经在程序中添加了其他注释。

  • 下一行定义Main过程,它是所有VB.Net程序的入口点。 Main过程说明了模块或类在执行时将执行的操作。

  • Main过程使用该语句指定其行为

    Console.WriteLine("Hello World") WriteLineSystem命名空间中定义的Console类的方法。 该语句导致消息“Hello,World!” 显示在屏幕上。

  • 最后一行Console.ReadKey()用于VS.NET用户。 从Visual Studio .NET启动程序时,这将阻止屏幕快速运行和关闭。

编译并执行VB.Net程序

如果您使用的是Visual Studio.Net IDE,请执行以下步骤 -

  • 启动Visual Studio。

  • 在菜单栏上,选择“文件”→“新建”→“项目”。

  • 从模板中选择Visual Basic

  • 选择Console Application。

  • 使用“浏览”按钮指定项目的名称和位置,然后选择“确定”按钮。

  • 新项目显示在解决方案资源管理器中

  • 在代码编辑器中编写代码。

  • 单击“运行”按钮或F5键以运行项目。 将出现一个包含Hello World行的命令提示符窗口。

您可以使用命令行而不是Visual Studio IDE编译VB.Net程序 -

  • 打开文本编辑器并添加上述代码。

  • 将文件另存为helloworld.vb

  • 打开命令提示符工具,然后转到保存文件的目录。

  • 输入vbc helloworld.vb并按Enter键编译代码。

  • 如果代码中没有错误,命令提示符将带您到下一行并生成helloworld.exe可执行文件。

  • 接下来,键入helloworld来执行您的程序。

  • 您将能够在屏幕上看到“Hello World”。

VB.Net - Basic Syntax

VB.Net是一种面向对象的编程语言。 在面向对象的编程方法中,程序由各种对象组成,这些对象通过动作相互交互。 对象可以采取的动作称为方法。 据说相同类型的物体具有相同的类型,或者更常见的是,它们属于同一类。

当我们考虑VB.Net程序时,它可以被定义为通过调用彼此的方法进行通信的对象集合。 现在让我们简要地看一下类,对象,方法和实例变量的含义。

  • Object - 对象具有状态和行为。 示例:狗具有状态 - 颜色,名称,品种以及行为 - 摇摆,吠叫,进食等。对象是类的实例。

  • Class - 可以将类定义为描述其类型对象支持的行为/状态的模板/蓝图。

  • Methods - 方法基本上是一种行为。 一个类可以包含许多方法。 它是在编写逻辑,操纵数据并执行所有操作的方法中。

  • Instance Variables - 每个对象都有其唯一的实例变量集。 对象的状态由分配给这些实例变量的值创建。

VB.Net中的矩形类

例如,让我们考虑一个Rectangle对象。 它具有长度和宽度等属性。 根据设计,它可能需要接受这些属性的值,计算面积和显示细节的方法。

让我们看一下Rectangle类的实现,并根据我们在其中的观察来讨论VB.Net的基本语法 -

Imports System
Public Class Rectangle
   Private length As Double
   Private width As Double
   'Public methods
   Public Sub AcceptDetails()
      length = 4.5
      width = 3.5
   End Sub
   Public Function GetArea() As Double
      GetArea = length * width
   End Function
   Public Sub Display()
      Console.WriteLine("Length: {0}", length)
      Console.WriteLine("Width: {0}", width)
      Console.WriteLine("Area: {0}", GetArea())
   End Sub
   Shared Sub Main()
      Dim r As New Rectangle()
      r.Acceptdetails()
      r.Display()
      Console.ReadLine()
   End Sub
End Class

编译并执行上述代码时,会产生以下结果 -

Length: 4.5
Width: 3.5
Area: 15.75

在前一章中,我们创建了一个包含代码的Visual Basic模块。 Sub Main表示VB.Net程序的入口点。 在这里,我们使用包含代码和数据的Class。 您可以使用类来创建对象。 例如,在代码中,r是一个Rectangle对象。

对象是类的实例 -

Dim r As New Rectangle()

如果指定的话,类可以具有可以从外部类访问的成员。 数据成员称为字段,过程成员称为方法。

可以在不创建类的对象的情况下调用Shared方法或static方法。 实例方法通过类的对象调用 -

Shared Sub Main()
   Dim r As New Rectangle()
   r.Acceptdetails()
   r.Display()
   Console.ReadLine()
End Sub

标识符 (Identifiers)

标识符是用于标识类,变量,函数或任何其他用户定义项的名称。 在VB.Net中命名类的基本规则如下 -

  • 名称必须以字母开头,后面可以跟一系列字母,数字(0 - 9)或下划线。 标识符中的第一个字符不能是数字。

  • 它不能包含任何嵌入空间或符号吗? - +! @#%^&*()[] {}。 ; :“'/和\。但是,可以使用下划线(_)。

  • 它不应该是保留关键字。

VB.Net Keywords

下表列出了VB.Net保留的关键字 -

AddHandlerAddressOfAliasAndAndAlsoAsBoolean
ByRefByteByValCallCaseCatchCBool
CByteCCharCDateCDecCDblCharCInt
ClassCLngCObjConstContinueCSByteCShort
CSngCStrCTypeCUIntCULngCUShortDate
DecimalDeclareDefaultDelegateDimDirectCastDo
DoubleEachElseElseIfEndEnd IfEnum
EraseErrorEventExitFalseFinallyFor
FriendFunctionGetGetTypeGetXML NamespaceGlobalGoTo
HandlesIfImplementsImportsInInheritsInteger
InterfaceIsIsNotLetLibLikeLong
LoopMeModModuleMustInheritMustOverrideMyBase
MyClassNamespaceNarrowingNewNextNotNothing
Not Inheritable 不可覆盖 ObjectOfOnOperatorOption
OptionalOrOrElseOverloadsOverridableOverridesParamArray
PartialPrivatePropertyProtectedPublicRaiseEventReadOnly
ReDimREM 删除处理程序 ResumeReturnSByteSelect
SetShadowsSharedShortSingleStaticStep
StopStringStructureSubSyncLockThenThrow
ToTrueTryTryCastTypeOfUIntegerWhile
WideningWithWithEventsWriteOnlyXor

VB.Net - Data Types

数据类型是指用于声明不同类型的变量或函数的扩展系统。 变量的类型决定了它在存储中占用的空间大小以及如何解释存储的位模式。

VB.Net中提供的数据类型

VB.Net提供了广泛的数据类型。 下表显示了所有可用的数据类型 -

数据类型 存储分配 价值范围
BooleanDepends on implementing platform False
Byte 1个字节 0 through 255 (unsigned)
Char 2个字节 0 through 65535 (unsigned)
Date 8个字节 0999:00(午夜),时间是1991年1月1日到9999年12月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 through 2,147,483,647 (signed)
Long 8个字节 -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807(signed)
Object

32位平台上的4个字节

64位平台上的8个字节

任何类型都可以存储在Object类型的变量中
SByte 1个字节 -128 through 127 (signed)
Short 2个字节 -32,768 through 32,767 (signed)
Single 4字节

-3.4028235E + 38至-1.401298E-45为负值;

1.401298E-45至3.4028235E + 38为正值

StringDepends on implementing platform 0到大约20亿个Unicode字符
UInteger 4字节 0 through 4,294,967,295 (unsigned)
ULong 8个字节 0 through 18,446,744,073,709,551,615 (unsigned)
User-DefinedDepends on implementing platform 结构的每个成员具有由其数据类型确定的范围,并且独立于其他成员的范围
UShort 2个字节 0 through 65,535 (unsigned)

例子 (Example)

以下示例演示了一些类型的使用 -

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

VB.Net中的类型转换函数

VB.Net提供以下内联类型转换功能 -

Sr.No. 功能和描述
1

CBool(expression)

将表达式转换为布尔数据类型。

2

CByte(expression)

将表达式转换为Byte数据类型。

3

CChar(expression)

将表达式转换为Char数据类型。

4

CDate(expression)

将表达式转换为Date数据类型

5

CDbl(expression)

将表达式转换为Double数据类型。

6

CDec(expression)

将表达式转换为Decimal数据类型。

7

CInt(expression)

将表达式转换为Integer数据类型。

8

CLng(expression)

将表达式转换为Long数据类型。

9

CObj(expression)

将表达式转换为Object类型。

10

CSByte(expression)

将表达式转换为SByte数据类型。

11

CShort(expression)

将表达式转换为Short数据类型。

12

CSng(expression)

将表达式转换为单数据类型。

13

CStr(expression)

将表达式转换为String数据类型。

14

CUInt(expression)

将表达式转换为UInt数据类型。

15

CULng(expression)

将表达式转换为ULng数据类型。

16

CUShort(expression)

将表达式转换为UShort数据类型。

例子 (Example)

以下示例演示了其中一些功能 -

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

VB.Net - Variables

变量只不过是我们的程序可以操作的存储区域的名称。 VB.Net中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局; 可存储在该内存中的值范围; 以及可以应用于变量的操作集。

我们已经讨论了各种数据类型。 VB.Net中提供的基本值类型可分为 -

类型
Integral types SByte,Byte,Short,UShort,Integer,UInteger,Long,ULong和Char
Floating point typesSingle and Double
Decimal typesDecimal
Boolean types 分配的真或假值
日期类型 Date

VB.Net还允许定义其他值类型的变量,如Enum和引用类型的变量,如Class 。 我们将在后续章节中讨论日期类型和类。

VB.Net中的变量声明

Dim语句用于一个或多个变量的变量声明和存储分配。 Dim语句用于模块,类,结构,过程或块级。

VB.Net中变量声明的语法是 -

[ < attributelist > ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]]
[ ReadOnly ] Dim [ WithEvents ] variablelist

Where,

  • attributelist是应用于变量的属性列表。 可选的。

  • accessmodifier定义变量的访问级别,它的值为 - Public,Protected,Friend,Protected Friend和Private。 可选的。

  • Shared声明一个共享变量,该变量不与类或结构的任何特定实例相关联,而是可用于类或结构的所有实例。 可选的。

  • Shadows表示变量在基类中重新声明并隐藏一个具有相同名称的元素或一组重载元素。 可选的。

  • Static表示变量将保留其值,即使在声明它的过程的后终止时也是如此。 可选的。

  • ReadOnly意味着可以读取变量,但不能写入。 可选的。

  • WithEvents指定该变量用于响应分配给变量的实例引发的事件。 可选的。

  • Variablelist提供声明的变量列表。

变量列表中的每个变量都具有以下语法和部分 -

variablename[ ( [ boundslist ] ) ] [ As [ New ] datatype ] [ = initializer ]

Where,

  • variablename - 是variablename的名称

  • boundslist - 可选。 它提供了数组变量的每个维度的边界列表。

  • New - 可选。 它在Dim语句运行时创建类的新实例。

  • datatype - 如果Option Strict为On,则为必需。 它指定变量的数据类型。

  • initializer - 如果未指定New,则为可选。 在创建变量时计算并分配给变量的表达式。

这里显示了一些有效的变量声明及其定义 -

Dim StudentID As Integer
Dim StudentName As String
Dim Salary As Double
Dim count1, count2 As Integer
Dim status As Boolean
Dim exitButton As New System.Windows.Forms.Button
Dim lastTime, nextTime As Date

VB.Net中的变量初始化

变量初始化(赋值),等号后跟常量表达式。 初始化的一般形式是 -

variable_name = value;

例如,

Dim pi As Double
pi = 3.14159

您可以在声明时初始化变量,如下所示 -

Dim StudentID As Integer = 100
Dim StudentName As String = "Bill Smith"

例子 (Example)

尝试使用以下示例,该示例使用各种类型的变量 -

Module variablesNdataypes
   Sub Main()
      Dim a As Short
      Dim b As Integer
      Dim c As Double
      a = 10
      b = 20
      c = a + b
      Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

a = 10, b = 20, c = 30

接受用户的值

System命名空间中的Console类提供了一个函数ReadLine用于接受来自用户的输入并将其存储到变量中。 例如,

Dim message As String
message = Console.ReadLine

以下示例演示了它 -

Module variablesNdataypes
   Sub Main()
      Dim message As String
      Console.Write("Enter message: ")
      message = Console.ReadLine
      Console.WriteLine()
      Console.WriteLine("Your Message: {0}", message)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果(假设用户输入Hello World) -

Enter message: Hello World   
Your Message: Hello World

左值和右值

有两种表达方式 -

  • lvalue - 作为lvalue的表达式可能显示为赋值的左侧或右侧。

  • rvalue - 作为rvalue的表达式可能出现在赋值的右侧但不是左侧。

变量是左值,因此可能出现在赋值的左侧。 数字文字是右值,因此可能无法分配,也不能出现在左侧。 以下是有效的声明 -

Dim g As Integer = 20

但是以下不是有效的语句,会产生编译时错误 -

20 = g

VB.Net - Constants and Enumerations

constants指的是程序在执行期间不会改变的固定值。 这些固定值也称为文字。

常量可以是任何基本数据类型,如整数常量,浮点常量,字符常量或字符串文字。 还有枚举常量。

常量被视为常规变量,除了它们的值在定义后无法修改。

enumeration是一组命名的整数常量。

声明常量

在VB.Net中,使用Const语句声明Const 。 Const语句用于模块,类,结构,过程或块级别,以代替文字值。

Const语句的语法是 -

[ < attributelist > ] [ accessmodifier ] [ Shadows ] 
Const constantlist

Where,

  • attributelist - 指定应用于常量的属性列表; 您可以提供以逗号分隔的多个属性。 可选的。

  • accessmodifier - 指定哪些代码可以访问这些常量。 可选的。 值可以是:Public,Protected,Friend,Protected Friend或Private。

  • Shadows - 这使常量隐藏基类中具有相同名称的编程元素。 可选的。

  • Constantlist - 给出声明的常量名称列表。 需要。

其中,每个常量名称具有以下语法和部分 -

constantname [ As datatype ] = initializer
  • constantname - 指定constantname的名称

  • datatype - 指定常量的数据类型

  • initializer - 指定分配给常量的值

例如,

'The following statements declare constants.'
Const maxval As Long = 4999
Public Const message As String = "HELLO" 
Private Const piValue As Double = 3.1415

例子 (Example)

以下示例演示了常量值的声明和使用 -

Module constantsNenum
   Sub Main()
      Const PI = 3.14149
      Dim radius, area As Single
      radius = 7
      area = PI * radius * radius
      Console.WriteLine("Area = " & Str(area))
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Area = 153.933

VB.Net中的打印和显示常量

VB.Net提供以下打印和显示常量 -

Sr.No. 常量和描述
1

vbCrLf

回车/换行字符组合。

2

vbCr

回车角色。

3

vbLf

换行符。

4

vbNewLine

换行符。

5

vbNullChar

空字符。

6

vbNullString

与零长度字符串(“”)不同; 用于调用外部程序。

7

vbObjectError

错误号码。 用户定义的错误号应大于此值。 例如:Err.Raise(Number)= vbObjectError + 1000

8

vbTab

制表符。

9

vbBack

退格字符。

声明枚举

使用Enum语句声明枚举类型。 Enum语句声明枚举并定义其成员的值。 Enum语句可用于模块,类,结构,过程或块级别。

Enum语句的语法如下 -

[ < attributelist > ] [ accessmodifier ]  [ Shadows ] 
Enum enumerationname [ As datatype ] 
   memberlist
End Enum

Where,

  • attributelist - 指应用于变量的属性列表。 可选的。

  • asscessmodifier - 指定哪些代码可以访问这些枚举。 可选的。 值可以是:Public,Protected,Friend或Private。

  • Shadows - 这使得枚举隐藏了基类中具有相同名称的编程元素。 可选的。

  • enumerationname - enumerationname名称。 需要

  • datatype - 指定枚举及其所有成员的数据类型。

  • memberlist - 指定在此语句中声明的成员常量列表。 需要。

成员列表中的每个成员都具有以下语法和部分:

[< attribute list >] member name [ = initializer ]

Where,

  • name - 指定成员的名称。 需要。

  • initializer - 分配给枚举成员的值。 可选的。

例如,

Enum Colors
   red = 1
   orange = 2
   yellow = 3
   green = 4
   azure = 5
   blue = 6
   violet = 7
End Enum

例子 (Example)

以下示例演示了Enum变量Colors声明和使用 -

Module constantsNenum
   Enum Colors
      red = 1
      orange = 2
      yellow = 3
      green = 4
      azure = 5
      blue = 6
      violet = 7
   End Enum
   Sub Main()
      Console.WriteLine("The Color Red is : " & Colors.red)
      Console.WriteLine("The Color Yellow is : " & Colors.yellow)
      Console.WriteLine("The Color Blue is : " & Colors.blue)
      Console.WriteLine("The Color Green is : " & Colors.green)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

The Color Red is: 1
The Color Yellow is: 3
The Color Blue is: 6
The Color Green is: 4

VB.Net - Modifiers

修饰符是添加了任何编程元素的关键字,以特别强调编程元素在程序中的行为或将被访问的方式。

例如,访问修饰符:Public,Private,Protected,Friend,Protected Friend等,表示编程元素的访问级别,如变量,常量,枚举或类。

VB.Net中的可用修饰符列表

下表提供了VB.Net修饰符的完整列表 -

Sr.No 修改 描述
1Ansi 指定Visual Basic应将所有字符串封送到美国国家标准协会(ANSI)值,而不管所声明的外部过程的名称。
2Assembly 指定源文件开头的属性适用于整个程序集。
3Async 指示它修改的方法或lambda表达式是异步的。 这种方法称为异步方法。 异步方法的调用者可以在不等待异步方法完成的情况下恢复其工作。
4Auto Declare语句中的charsetmodifier部分提供了在调用外部过程期间编组字符串的字符集信息。 它还会影响Visual Basic在外部文件中搜索外部过程名称的方式。 Auto修饰符指定Visual Basic应根据.NET Framework规则封送字符串。
5ByRef 指定通过引用传递参数,即,被调用的过程可以更改调用代码中参数的基础变量的值。 它是在以下情况下使用的 -
  • Declare Statement
  • 功能说明
  • Sub Statement
6ByVal 指定以这样的方式传递参数:被调用的过程或属性不能更改调用代码中参数的基础变量的值。 它是在以下情况下使用的 -
  • Declare Statement
  • 功能说明
  • 运算符声明
  • Property Statement
  • Sub Statement
7Default 将属性标识为其类,结构或接口的默认属性。
8Friend

指定可以从包含其声明的程序集中访问一个或多个声明的编程元素,而不仅仅是声明它们的组件。

朋友访问通常是应用程序编程元素的首选级别,而Friend是接口,模块,类或结构的默认访问级别。

9In 它用于通用接口和委托。
10Iterator 指定函数或Get访问器是迭代器。 迭代器对集合执行自定义迭代。
11Key Key关键字使您可以指定匿名类型属性的行为。
12Module 指定源文件开头的属性应用于当前程序集模块。 它与Module语句不同。
13MustInherit 指定一个类只能用作基类,并且不能直接从它创建对象。
14MustOverride 指定在此类中未实现属性或过程,并且必须在派生类中重写它才能使用它。
15Narrowing 指示转换运算符(CType)将类或结构转换为可能无法保存原始类或结构的某些可能值的类型。
16NotInheritable 指定不能将类用作基类。
17NotOverridable 指定无法在派生类中重写属性或过程。
18Optional 指定在调用过程时可以省略过程参数。
19Out 对于泛型类型参数,Out关键字指定类型是协变的。
20Overloads 指定属性或过程重新声明具有相同名称的一个或多个现有属性或过程。
21Overridable 指定属性或过程可以由派生类中具有相同名称的属性或过程覆盖。
22Overrides 指定属性或过程重写从基类继承的同名属性或过程。
23ParamArray ParamArray允许您将任意数量的参数传递给过程。 ParamArray参数始终使用ByVal声明。
24Partial 指示类或结构声明是类或结构的部分定义。
25Private 指定一个或多个声明的编程元素只能在其声明上下文中访问,包括在任何包含的类型中。
26Protected 指定一个或多个声明的编程元素只能从它们自己的类或派生类中访问。
27Public 指定一个或多个声明的编程元素没有访问限制。
28ReadOnly 指定可以读取变量或属性但不能写入。
29Shadows 指定声明的编程元素重新声明并隐藏基类中具有相同名称的元素或重载元素集。
30Shared 指定一个或多个声明的编程元素与一个类或结构相关联,而不是与类或结构的特定实例相关联。
31Static 指定一个或多个声明的局部变量将继续存在,并在声明它们的过程终止后保留其最新值。
32Unicode 指定Visual Basic应将所有字符串封送为Unicode值,而不管所声明的外部过程的名称。
33Widening 指示转换运算符(CType)将类或结构转换为可以包含原始类或结构的所有可能值的类型。
34WithEvents 指定一个或多个声明的成员变量引用可以引发事件的类的实例。
35WriteOnly 指定可以写入属性但不能读取。

VB.Net - Statements

statement是Visual Basic程序中的完整指令。 它可能包含关键字,运算符,变量,文字值,常量和表达式。

声明可归类为 -

  • Declaration statements - 这些是您为变量,常量或过程命名的语句,也可以指定数据类型。

  • Executable statements - 这些是启动操作的语句。 这些语句可以调用方法或函数,循环或分支代码块或将值或表达式赋值给变量或常量。 在最后一种情况下,它被称为Assignment语句。

声明声明

声明语句用于命名和定义过程,变量,属性,数组和常量。 声明编程元素时,还可以定义其数据类型,访问级别和范围。

您可以声明的编程元素包括变量,常量,枚举,类,结构,模块,接口,过程,过程参数,函数返回,外部过程引用,运算符,属性,事件和委托。

以下是VB.Net中的声明声明 -

Sr.No 声明和说明
1

Dim Statement

声明并为一个或多个变量分配存储空间。

Dim number As Integer
Dim quantity As Integer = 100
Dim message As String = "Hello!"
2

Const Statement

声明并定义一个或多个常量。

Const maximum As Long = 1000
Const naturalLogBase As Object 
= CDec(2.7182818284)
3

Enum Statement

声明枚举并定义其成员的值。

Enum CoffeeMugSize
   Jumbo
   ExtraLarge
   Large
   Medium
   Small
End Enum 
4

Class Statement

声明类的名称,并引入该类包含的变量,属性,事件和过程的定义。

Class Box
Public length As Double
Public breadth As Double   
Public height As Double
End Class
5

Structure Statement

声明结构的名称,并引入结构包含的变量,属性,事件和过程的定义。

Structure Box
Public length As Double           
Public breadth As Double   
Public height As Double
End Structure
6

Module Statement

声明模块的名称,并介绍模块包含的变量,属性,事件和过程的定义。

Public Module myModule
Sub Main()
Dim user As String = 
InputBox("What is your name?") 
MsgBox("User name is" & user)
End Sub 
End Module
7

Interface Statement

声明接口的名称并引入接口所包含的成员的定义。

Public Interface MyInterface
   Sub doSomething()
End Interface 
8

Function Statement

声明定义Function过程的名称,参数和代码。

Function myFunction
(ByVal n As Integer) As Double 
   Return 5.87 * n
End Function
9

Sub Statement

声明定义Sub过程的名称,参数和代码。

Sub mySub(ByVal s As String)
   Return
End Sub 
10

Declare Statement

声明对外部文件中实现的过程的引用。

Declare Function getUserName
Lib "advapi32.dll" 
Alias "GetUserNameA" 
(
   ByVal lpBuffer As String, 
   ByRef nSize As Integer) As Integer 
11

Operator Statement

声明在类或结构上定义运算符过程的运算符符号,操作数和代码。

Public Shared Operator +
(ByVal x As obj, ByVal y As obj) As obj
   Dim r As New obj
' implemention code for r = x + y
   Return r
End Operator 
12

Property Statement

声明属性的名称,以及用于存储和检索属性值的属性过程。

ReadOnly Property quote() As String 
   Get 
      Return quoteString
   End Get 
End Property
13

Event Statement

声明用户定义的事件。

Public Event Finished()
14

Delegate Statement

用于声明委托。

Delegate Function MathOperator( 
   ByVal x As Double, 
   ByVal y As Double 
) As Double 

可执行的声明

可执行语句执行操作。 调用过程,分支到代码中的另一个位置,循环遍历多个语句或计算表达式的语句是可执行语句。 赋值语句是可执行语句的特例。

Example

以下示例演示了决策制定声明 -

Module decisions
   Sub Main()
      'local variable definition '
      Dim a As Integer = 10
      ' check the boolean condition using if statement '
      If (a < 20) Then
         ' if condition is true then print the following '
         Console.WriteLine("a is less than 20")
      End If
      Console.WriteLine("value of a is : {0}", a)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

a is less than 20;
value of a is : 10

VB.Net - Directives

VB.Net编译器指令给出了编译器在实际编译开始之前预处理信息的指令。 所有这些指令都以#开头,并且在行上的指令之前只能出现空白字符。 这些指令不是陈述。

VB.Net编译器没有单独的预处理器; 但是,指令的处理就像有一个指令一样。 在VB.Net中,编译器指令用于帮助进行条件编译。 与C和C ++指令不同,它们不用于创建宏。

VB.Net中的编译器指令

VB.Net提供以下一组编译器指令 -

  • #Const指令

  • #ExternalSource指令

  • #If ...然后......#Else Directives

  • #Region指令

#Const指令

该指令定义条件编译器常量。 该指令的语法是 -

#Const constname = expression

Where,

  • constname - 指定常量的名称。 需要。

  • expression - 它是文字或其他条件编译器常量,或者包括除Is之外的任何或所有算术或逻辑运算符的组合。

例如,

#Const state = "WEST BENGAL"

Example

以下代码演示了该指令的假设使用 -

Module mydirectives
#Const age = True
Sub Main()
   #If age Then
      Console.WriteLine("You are welcome to the Robotics Club")
   #End If
   Console.ReadKey()
End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

You are welcome to the Robotics Club

#ExternalSource指令

该指令用于指示源代码的特定行与源外部文本之间的映射。 它仅由编译器使用,调试器对代码编译没有影响。

该指令允许将外部代码文件中的外部代码包含在源代码文件中。

该指令的语法是 -

#ExternalSource( StringLiteral , IntLiteral )
   [ LogicalLine ]
#End ExternalSource

#ExternalSource指令的参数是外部文件的路径,第一行的行号以及发生错误的行。

Example

以下代码演示了该指令的假设使用 -

Module mydirectives
   Public Class ExternalSourceTester
      Sub TestExternalSource()
      #ExternalSource("c:\vbprogs\directives.vb", 5)
         Console.WriteLine("This is External Code. ")
      #End ExternalSource
      End Sub
   End Class
   Sub Main()
      Dim t As New ExternalSourceTester()
      t.TestExternalSource()
      Console.WriteLine("In Main.")
      Console.ReadKey()
   End Sub

编译并执行上述代码时,会产生以下结果 -

This is External Code.
In Main.

#If ...然后......#Else Directives

该指令有条件地编译所选的Visual Basic代码块。

该指令的语法是 -

#If expression Then
   statements
[ #ElseIf expression Then
   [ statements ]
...
#ElseIf expression Then
   [ statements ] ]
[ #Else
   [ statements ] ]
#End If

例如,

#Const TargetOS = "Linux"
#If TargetOS = "Windows 7" Then
   ' Windows 7 specific code
#ElseIf TargetOS = "WinXP" Then
   ' Windows XP specific code
#Else
   ' Code for other OS
#End if

Example

以下代码演示了该指令的假设使用 -

Module mydirectives
#Const classCode = 8
   Sub Main()
   #If classCode = 7 Then
      Console.WriteLine("Exam Questions for Class VII")
   #ElseIf classCode = 8 Then
      Console.WriteLine("Exam Questions for Class VIII")
   #Else
      Console.WriteLine("Exam Questions for Higher Classes")
   #End If
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Exam Questions for Class VIII

#Region指令

该指令有助于折叠和隐藏Visual Basic文件中的代码部分。

该指令的语法是 -

#Region "identifier_string" 
#End Region

例如,

#Region "StatsFunctions" 
   ' Insert code for the Statistical functions here.
#End Region

VB.Net - Operators

运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 VB.Net拥有丰富的内置运算符,并提供以下类型的常用运算符 -

  • 算术运算符

  • 比较运算符

  • 逻辑/按位运算符

  • 位移算子

  • 分配运算符

  • 杂项运算符

本教程将介绍最常用的运算符。

算术运算符 (Arithmetic Operators)

下表显示了VB.Net支持的所有算术运算符。 假设变量A保持2而变量B保持7,则 -

显示示例

操作者 描述
^ 将一个操作数提升到另一个操作数 B ^ A将给49
+ 添加两个操作数 A + B将给出9
- 从第一个减去第二个操作数 A - B将给-5
* 将两个操作数相乘 A * B将给出14
/ 将一个操作数除以另一个操作数并返回浮点结果 B/A将给出3.5
\ 将一个操作数除以另一个操作数并返回整数结果 B\A将给出3
MOD 模数运算符和整数除法后的余数 B MOD A将给出1

比较运算符 (Comparison Operators)

下表显示了VB.Net支持的所有比较运算符。 假设变量A保持10,变量B保持20,则 -

显示示例

操作者 描述
= 检查两个操作数的值是否相等; 如果是,则条件成立。 (A = B)不是真的。
<> 检查两个操作数的值是否相等; 如果值不相等,则条件成立。 (A <> B)是真的。
> 检查左操作数的值是否大于右操作数的值; 如果是,则条件成立。 (A> B)不是真的。
< 检查左操作数的值是否小于右操作数的值; 如果是,则条件成立。 (A < B) 为真
>= 检查左操作数的值是否大于或等于右操作数的值; 如果是,则条件成立。 (A> = B)不是真的。
<= 检查左操作数的值是否小于或等于右操作数的值; 如果是,则条件成立。 (A <= B)是真的。

除此之外,VB.Net还提供了三个比较运算符,我们将在后面的章节中使用它们; 但是,我们在这里给出一个简短的描述。

  • Is运算符 - 它比较两个对象引用变量,并确定两个对象引用是否引用同一对象而不执行值比较。 如果object1和object2都引用完全相同的对象实例,则结果为True ; 否则,结果为假。

  • IsNot运算符 - 它还比较两个对象引用变量,并确定两个对象引用是否引用不同的对象。 如果object1和object2都引用完全相同的对象实例,则结果为False ; 否则,结果为True。

  • Like运算符Like - 它将字符串与模式进行比较。

Logical/Bitwise Operators

下表显示了VB.Net支持的所有逻辑运算符。 假设变量A保持布尔值True,变量B保持布尔值False,则 -

显示示例

操作者 描述
And 它是逻辑以及按位AND运算符。 如果两个操作数都为真,则条件成立。 该运算符不执行短路,即它评估两个表达式。 (A和B)是假的。
Or 它是逻辑以及按位OR运算符。 如果两个操作数中的任何一个为真,则条件成立。 该运算符不执行短路,即它评估两个表达式。 (A或B)是真的。
Not 它是逻辑以及按位NOT运算符。 用于反转其操作数的逻辑状态。 如果条件为真,则Logical NOT运算符将为false。 不(A和B)是真的。
Xor 它是逻辑以及按位逻辑异或运算符。 如果两个表达式都为True或两个表达式都为False,则返回True; 否则返回False。 该运算符不执行短路,它总是计算两个表达式,并且没有该运算符的短路对应物。 Xor B是真的。
AndAlso 它是逻辑AND运算符。 它仅适用于布尔数据。 它执行短路。 (A AndAlso B)是假的。
OrElse 它是逻辑OR运算符。 它仅适用于布尔数据。 它执行短路。 (A OrElse B)是真的。
IsFalse 它确定表达式是否为False。
IsTrue 它确定表达式是否为True。

位移算子

我们已经讨论了按位运算符。 位移操作符对二进制值执行移位操作。 在进入位移运算符之前,让我们理解位操作。

按位运算符处理位并执行逐位运算。 &,|和^的真值表如下 -

p q p&q p | q p ^ q
00000
01011
11110
10011

假设A = 60; 和B = 13; 现在以二进制格式,他们将如下 -

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A | B = 0011 1101

A ^ B = 0011 0001

~A = 1100 0011

我们已经看到VB.Net支持的Bitwise运算符是And,Or,Xor和Not。 对于左移和右移,位移运算符分别为>>和<

假设变量A保持60而变量B保持13,则 -

显示示例

操作者 描述
And 如果两个操作数中都存在,则按位AND运算符将一个位复制到结果中。 (A和B)将给出12,即0000 1100
Or 二进制OR运算符如果存在于任一操作数中,则复制一位。 (A或B)将给出61,即0011 1101
Xor 二进制异或运算符如果在一个操作数中设置但不在两个操作数中设置,则复制该位。 (A Xor B)将给出49,即0011 0001
Not 二元一元补语运算符是一元的,具有“翻转”位的效果。 (不是A)将给出-61,由于带符号的二进制数,它是2的补码形式的1100 0011。
<< 二进制左移运算符。 左操作数值向左移动右操作数指定的位数。 A << 2将给出240,即1111 0000
>> 二进制右移运算符。 左操作数值向右移动右操作数指定的位数。 A >> 2将给出15,即0000 1111

赋值操作符 (Assignment Operators)

VB.Net支持以下赋值运算符 -

显示示例

操作者 描述
= 简单赋值运算符,将右侧操作数的值分配给左侧操作数 C = A + B将A + B的值分配给C
+= 添加AND赋值运算符,它将右操作数添加到左操作数并将结果赋给左操作数 C + = A等于C = C + A.
-= 减去AND赋值运算符,它从左操作数中减去右操作数,并将结果赋给左操作数 C - = A相当于C = C - A.
*= 乘以AND赋值运算符,它将右操作数与左操作数相乘,并将结果赋给左操作数 C * = A等于C = C * A.
/= 除法AND赋值运算符,它将左操作数除以右操作数,并将结果赋给左操作数(浮点除法) C/= A相当于C = C/A.
\= 除AND赋值运算符,它将左操作数除以右操作数,并将结果赋给左操作数(整数除法) C\= A相当于C = C\A.
^= 指数和赋值运算符。 它将左操作数提升为右操作数的幂,并将结果赋给左操作数。 C ^ = A等于C = C ^ A.
<<= 左移AND赋值运算符 C << = 2与C = C << 2相同
>>= 右移AND赋值运算符 C >> = 2与C = C >> 2相同
&= 将String表达式连接到String变量或属性,并将结果分配给变量或属性。

Str1&= Str2与...相同

Str1 = Str1和Str2

混合操作符 (Miscellaneous Operators)

VB.Net支持的其他重要运算符很少。

显示示例

操作者 描述
AddressOf 返回过程的地址。
AddHandler Button1.Click,
AddressOf Button1_Click
Await 它应用于异步方法或lambda表达式中的操作数,以暂停方法的执行,直到等待的任务完成。
 
Dim result As res
= Await AsyncMethodThatReturnsResult()
Await AsyncMethod()
GetType 它返回指定类型的Type对象。 Type对象提供有关类型的信息,例如其属性,方法和事件。
MsgBox(GetType(Integer).ToString())
功能表达 它声明了定义函数lambda表达式的参数和代码。
Dim add5 = Function(num As
   Integer) num + 5
'prints 10
Console.WriteLine(add5(5))
If 它使用短路评估来有条件地返回两个值中的一个。 可以使用三个参数或两个参数调用If运算符。
Dim num = 5
Console.WriteLine(If(num >= 0,
"Positive", "Negative"))

运算符在VB.Net中的优先级

运算符优先级确定表达式中的术语分组。 这会影响表达式的计算方式。 某些运算符的优先级高于其他运算符; 例如,乘法运算符的优先级高于加法运算符 -

例如,x = 7 + 3 * 2; 这里,x被赋值为13,而不是20,因为operator *的优先级高于+,所以它首先乘以3 * 2然后加到7中。

此处,具有最高优先级的运算符显示在表的顶部,具有最低优先级的运算符显示在底部。 在表达式中,将首先评估更高优先级的运算符。

显示示例

操作者 优先权
AwaitHighest
Exponentiation (^)
一元认同和否定(+, - )
乘法和浮点除法(*,/)
Integer division (\)
Modulus arithmetic (Mod)
加法和减法(+, - )
算术位移(<>)
所有比较运算符(=,<>,,> =,Is,IsNot,Like,TypeOf ...是)
Negation (Not)
Conjunction (And, AndAlso)
Inclusive disjunction (Or, OrElse)
Exclusive disjunction (Xor)Lowest

VB.Net - Decision Making

决策结构要求程序员指定一个或多个要由程序评估或测试的条件,以及在条件被确定为真时要执行的一个或多个语句,以及可选的,如果条件要执行的其他语句被认定是假的。

以下是大多数编程语言中常见决策结构的一般形式 -

VB.Net中的决策声明

VB.Net提供以下类型的决策制定声明。 单击以下链接以查看其详细信息。

声明 描述

If ... Then statement

If...Then statement由一个布尔表达式后跟一个或多个语句组成。

If...Then...Else statement

If...Then statement后面可以跟一个可选的Else statement ,该Else statement在布尔表达式为false时执行。

嵌套的If语句

您可以在另一个IfElse if语句中使用一个IfElse if语句。

Select Case statement

Select Case语句允许根据值列表测试变量的相等性。

嵌套的Select Case语句

您可以在另一个select case语句中使用一个select case语句。

VB.Net - Loops

可能存在需要多次执行代码块的情况。 通常,语句按顺序执行:首先执行函数中的第一个语句,然后执行第二个语句,依此类推。

编程语言提供各种控制结构,允许更复杂的执行路径。

循环语句允许我们多次执行语句或语句组,以下是大多数编程语言中循环语句的一般形式 -

循环架构

VB.Net提供以下类型的循环来处理循环要求。 单击以下链接以查看其详细信息。

循环类型 描述

Do Loop

当布尔条件为True或者条件变为True时,它会重复封闭的语句块。 它可以随时使用Exit Do语句终止。

For...Next

它重复指定次数的一组语句,循环索引计算循环执行时的循环迭代次数。

For Each...Next

它为集合中的每个元素重复一组语句。 此循环用于访问和操作数组或VB.Net集合中的所有元素。

While... End While

只要给定条件为True,它就会执行一系列语句。

With... End With

它不完全是一个循环结构。 它执行一系列重复引用单个对象或结构的语句。

嵌套循环

您可以在任何其他循环中使用一个或多个循环While,For或Do循环。

循环控制语句 (Loop Control Statements)

循环控制语句将执行从其正常序列更改。 当执行离开作用域时,将销毁在该作用域中创建的所有自动对象。

VB.Net提供以下控制语句。 单击以下链接以查看其详细信息。

控制声明 描述

Exit statement

终止loopselect case语句,并在循环或select case之后立即将执行转移到语句。

Continue statement

导致循环跳过其身体的其余部分,并在重复之前立即重新测试其状态。

GoTo statement

将控制转移到带标签的声明。 虽然不建议在程序中使用GoTo语句。

VB.Net - Strings

在VB.Net中,您可以使用字符串作为字符数组,但更常见的做法是使用String关键字来声明字符串变量。 string关键字是System.String类的别名。

创建一个String对象

您可以使用以下方法之一创建字符串对象 -

  • 通过将字符串文字分配给String变量

  • 通过使用String类构造函数

  • 通过使用字符串连接运算符(+)

  • 通过检索属性或调用返回字符串的方法

  • 通过调用格式化方法将值或对象转换为其字符串表示形式

以下示例演示了这一点 -

Module strings
   Sub Main()
      Dim fname, lname, fullname, greetings As String
      fname = "Rowan"
      lname = "Atkinson"
      fullname = fname + " " + lname
      Console.WriteLine("Full Name: {0}", fullname)
      'by using string constructor
      Dim letters As Char() = {"H", "e", "l", "l", "o"}
      greetings = New String(letters)
      Console.WriteLine("Greetings: {0}", greetings)
      'methods returning String
      Dim sarray() As String = {"Hello", "From", "Tutorials", "Point"}
      Dim message As String = String.Join(" ", sarray)
      Console.WriteLine("Message: {0}", message)
      'formatting method to convert a value 
      Dim waiting As DateTime = New DateTime(2012, 12, 12, 17, 58, 1)
      Dim chat As String = String.Format("Message sent at {0:t} on {0:D}", waiting)
      Console.WriteLine("Message: {0}", chat)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Full Name: Rowan Atkinson
Greetings: Hello
Message: Hello From IOWIKI
Message: Message sent at 5:58 PM on Wednesday, December 12, 2012

字符串类的属性

String类具有以下两个属性 -

Sr.No 物业名称和描述
1

Chars

获取当前String对象中指定位置的Char对象。

2

Length

获取当前String对象中的字符数。

String类的方法

String类有许多方法可以帮助您处理字符串对象。 下表提供了一些最常用的方法 -

Sr.No 方法名称和描述
1

Public Shared Function Compare ( strA As String, strB As String ) As Integer

比较两个指定的字符串对象,并返回一个整数,指示它们在排序顺序中的相对位置。

2

Public Shared Function Compare ( strA As String, strB As String, ignoreCase As Boolean ) As Integer

比较两个指定的字符串对象,并返回一个整数,指示它们在排序顺序中的相对位置。 但是,如果Boolean参数为true,则忽略大小写。

3

Public Shared Function Concat ( str0 As String, str1 As String ) As String

连接两个字符串对象。

4

Public Shared Function Concat ( str0 As String, str1 As String, str2 As String ) As String

连接三个字符串对象。

5

Public Shared Function Concat (str0 As String, str1 As String, str2 As String, str3 As String ) As String

连接四个字符串对象。

6

Public Function Contains ( value As String ) As Boolean

返回一个值,指示指定的字符串对象是否出现在此字符串中。

7

Public Shared Function Copy ( str As String ) As String

创建一个与指定字符串具有相同值的新String对象。

8

pPublic Sub CopyTo ( sourceIndex As Integer, destination As Char(), destinationIndex As Integer, count As Integer )

将指定数量的字符从字符串对象的指定位置复制到Unicode字符数组中的指定位置。

9

Public Function EndsWith ( value As String ) As Boolean

确定字符串对象的结尾是否与指定的字符串匹配。

10

Public Function Equals ( value As String ) As Boolean

确定当前字符串对象和指定的字符串对象是否具有相同的值。

11

Public Shared Function Equals ( a As String, b As String ) As Boolean

确定两个指定的字符串对象是否具有相同的值。

12

Public Shared Function Format ( format As String, arg0 As Object ) As String

使用指定对象的字符串表示形式替换指定字符串中的一个或多个格式项。

13

Public Function IndexOf ( value As Char ) As Integer

返回当前字符串中第一次出现的指定Unicode字符的从零开始的索引。

14

Public Function IndexOf ( value As String ) As Integer

返回此实例中第一次出现的指定字符串的从零开始的索引。

15

Public Function IndexOf ( value As Char, startIndex As Integer ) As Integer

返回此字符串中第一次出现的指定Unicode字符的从零开始的索引,从指定的字符位置开始搜索。

16

Public Function IndexOf ( value As String, startIndex As Integer ) As Integer

返回此实例中第一次出现的指定字符串的从零开始的索引,从指定的字符位置开始搜索。

17

Public Function IndexOfAny ( anyOf As Char() ) As Integer

返回指定Unicode字符数组中任何字符的此实例中第一次出现的从零开始的索引。

18

Public Function IndexOfAny ( anyOf As Char(), startIndex As Integer ) As Integer

返回指定Unicode字符数组中任何字符的此实例中第一次出现的从零开始的索引,从指定字符位置开始搜索。

19

Public Function Insert ( startIndex As Integer, value As String ) As String

返回一个新字符串,其中在当前字符串对象的指定索引位置插入指定的字符串。

20

Public Shared Function IsNullOrEmpty ( value As String ) As Boolean

指示指定的字符串是null还是空字符串。

21

Public Shared Function Join ( separator As String, ParamArray value As String() ) As String

使用每个元素之间的指定分隔符连接字符串数组的所有元素。

22

Public Shared Function Join ( separator As String, value As String(), startIndex As Integer, count As Integer ) As String

使用每个元素之间的指定分隔符连接字符串数组的指定元素。

23

Public Function LastIndexOf ( value As Char ) As Integer

返回当前字符串对象中最后一次出现的指定Unicode字符的从零开始的索引位置。

24

Public Function LastIndexOf ( value As String ) As Integer

返回当前字符串对象中最后一次出现的指定字符串的从零开始的索引位置。

25

Public Function Remove ( startIndex As Integer ) As String

从当前实例中删除所有字符,从指定位置开始并继续到最后一个位置,然后返回字符串。

26

Public Function Remove ( startIndex As Integer, count As Integer ) As String

从指定位置开始删除当前字符串中指定数量的字符并返回该字符串。

27

Public Function Replace ( oldChar As Char, newChar As Char ) As String

使用指定的Unicode字符替换当前字符串对象中所有出现的指定Unicode字符,并返回新字符串。

28

Public Function Replace ( oldValue As String, newValue As String ) As String

使用指定的字符串替换当前字符串对象中所有出现的指定字符串,并返回新字符串。

29

Public Function Split ( ParamArray separator As Char() ) As String()

返回一个字符串数组,该数组包含当前字符串对象中的子字符串,由指定的Unicode字符数组的元素分隔。

30

Public Function Split ( separator As Char(), count As Integer ) As String()

返回一个字符串数组,该数组包含当前字符串对象中的子字符串,由指定的Unicode字符数组的元素分隔。 int参数指定要返回的最大子串数。

31

Public Function StartsWith ( value As String ) As Boolean

确定此字符串实例的开头是否与指定的字符串匹配。

32

Public Function ToCharArray As Char()

返回包含当前字符串对象中所有字符的Unicode字符数组。

33

Public Function ToCharArray ( startIndex As Integer, length As Integer ) As Char()

返回一个Unicode字符数组,其中包含当前字符串对象中的所有字符,从指定的索引开始直到指定的长度。

34

Public Function ToLower As String

返回转换为小写的此字符串的副本。

35

Public Function ToUpper As String

返回转换为大写的此字符串的副本。

36

Public Function Trim As String

从当前String对象中删除所有前导和尾随空格字符。

上面的方法列表并不详尽,请访问MSDN库以获取完整的方法列表和String类构造函数。

例子 (Examples)

以下示例演示了上面提到的一些方法 -

Comparing Strings

Module strings
   Sub Main()
      Dim str1, str2 As String
      str1 = "This is test"
      str2 = "This is text"
      If (String.Compare(str1, str2) = 0) Then
         Console.WriteLine(str1 + " and " + str2 + " are equal.")
      Else
         Console.WriteLine(str1 + " and " + str2 + " are not equal.")
      End If
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

This is test and This is text are not equal.

String Contains String

Module strings
   Sub Main()
      Dim str1 As String
      str1 = "This is test"
      If (str1.Contains("test")) Then
         Console.WriteLine("The sequence 'test' was found.")
      End If
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

The sequence 'test' was found.

Getting a Substring:

Module strings
   Sub Main()
      Dim str As String
      str = "Last night I dreamt of San Pedro"
      Console.WriteLine(str)
      Dim substr As String = str.Substring(23)
      Console.WriteLine(substr)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Last night I dreamt of San Pedro
San Pedro.

Joining Strings

Module strings
   Sub Main()
      Dim strarray As String() = {
         "Down the way where the nights are gay",
         "And the sun shines daily on the mountain top",
         "I took a trip on a sailing ship",
         "And when I reached Jamaica",
         "I made a stop"
      }
      Dim str As String = String.Join(vbCrLf, strarray)
      Console.WriteLine(str)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Down the way where the nights are gay
And the sun shines daily on the mountain top
I took a trip on a sailing ship
And when I reached Jamaica
I made a stop

VB.Net - Date & Time

您编写的大多数软件都需要实现某种形式的日期函数来返回当前日期和时间。 日期是日常生活的重要组成部分,无需思考即可轻松与他们合作。 VB.Net还为日期算法提供了强大的工具,使得操作日期变得容易。

Date数据类型包含日期值,时间值或日期和时间值。 Date的默认值是0001年1月1日的0:00:00(午夜)。等效的.NET数据类型是System.DateTime

DateTime结构表示一个时刻,通常表示为日期和时间

'Declaration
<SerializableAttribute> _
Public Structure DateTime _
   Implements IComparable, IFormattable, IConvertible, ISerializable,  
   IComparable(Of DateTime), IEquatable(Of DateTime)

您还可以从DateAndTime类获取当前日期和时间。

DateAndTime模块包含日期和时间操作中使用的过程和属性。

'Declaration
<StandardModuleAttribute> _
Public NotInheritable Class DateAndTime

Note:

DateTime结构和DateAndTime模块都包含NowToday等属性,因此初学者经常会发现它令人困惑。 DateAndTime类属于Microsoft.VisualBasic命名空间,DateTime结构属于System命名空间。 因此,使用后者可以帮助您将代码移植到另一种.Net语言,如C#。 但是,DateAndTime类/模块包含Visual Basic中可用的所有旧日期函数。

DateTime结构的属性和方法

下表列出了DateTime结构的一些常用properties -

Sr.No 属性 描述
1 Date 获取此实例的日期组件。
2 Day 获取此实例表示的月中的某天。
3 DayOfWeek 获取此实例表示的星期几。
4 DayOfYear 获取此实例表示的年份中的某一天。
5 Hour 获取此实例表示的日期的小时组件。
6 Kind 获取一个值,该值指示此实例表示的时间是基于本地时间,协调世界时(UTC)还是两者都不是。
7 Millisecond 获取此实例表示的日期的毫秒组件。
8 Minute 获取此实例表示的日期的分钟组件。
9 Month 获取此实例表示的日期的月份组件。
10 Now 获取一个DateTime对象,该对象在此计算机上设置为当前日期和时间,表示为本地时间。
11 Second 获取此实例表示的日期的秒组件。
12 Ticks 获取表示此实例的日期和时间的刻度数。
13 TimeOfDay 获取此实例的时间。
14 Today 获取当前日期。
15 UtcNow 获取一个DateTime对象,该对象在此计算机上设置为当前日期和时间,表示为协调世界时(UTC)。
16 Year 获取此实例表示的日期的年份组件。

下表列出了DateTime结构的一些常用methods -

Sr.No 方法名称和描述
1

Public Function Add (value As TimeSpan) As DateTime

返回一个新的DateTime,它将指定TimeSpan的值添加到此实例的值。

2

Public Function AddDays ( value As Double) As DateTime

返回一个新的DateTime,它将指定的天数添加到此实例的值中。

3

Public Function AddHours (value As Double) As DateTime

返回一个新的DateTime,它将指定的小时数添加到此实例的值中。

4

Public Function AddMinutes (value As Double) As DateTime

返回一个新的DateTime,它将指定的分钟数添加到此实例的值中。

5

Public Function AddMonths (months As Integer) As DateTime

返回一个新的DateTime,它将指定的月数添加到此实例的值中。

6

Public Function AddSeconds (value As Double) As DateTime

返回一个新的DateTime,它将指定的秒数添加到此实例的值中。

7

Public Function AddYears (value As Integer ) As DateTime

返回一个新的DateTime,它将指定的年数添加到此实例的值中。

8

Public Shared Function Compare (t1 As DateTime,t2 As DateTime) As Integer

比较两个DateTime实例并返回一个整数,该整数指示第一个实例是否早于,等于或晚于第二个实例。

9

Public Function CompareTo (value As DateTime) As Integer

将此实例的值与指定的DateTime值进行比较,并返回一个整数,该整数指示此实例是否早于,等于或晚于指定的DateTime值。

10

Public Function Equals (value As DateTime) As Boolean

返回一个值,该值指示此实例的值是否等于指定的DateTime实例的值。

11

Public Shared Function Equals (t1 As DateTime, t2 As DateTime) As Boolean

返回一个值,该值指示两个DateTime实例是否具有相同的日期和时间值。

12

Public Overrides Function ToString As String

将当前DateTime对象的值转换为其等效的字符串表示形式。

上面的方法列表并不详尽,请访问Microsoft文档以获取DateTime结构的方法和属性的完整列表。

创建DateTime对象

您可以使用以下方法之一创建DateTime对象 -

  • 通过从任何重载的DateTime构造函数调用DateTime构造函数。

  • 通过为DateTime对象分配属性或方法返回的日期和时间值。

  • 通过解析日期和时间值的字符串表示。

  • 通过调用DateTime结构的隐式默认构造函数。

以下示例演示了这一点 -

Module Module1
   Sub Main()
      'DateTime constructor: parameters year, month, day, hour, min, sec
      Dim date1 As New Date(2012, 12, 16, 12, 0, 0)
      'initializes a new DateTime value
      Dim date2 As Date = #12/16/2012 12:00:52 AM#
      'using properties
      Dim date3 As Date = Date.Now
      Dim date4 As Date = Date.UtcNow
      Dim date5 As Date = Date.Today
      Console.WriteLine(date1)
      Console.WriteLine(date2)
      Console.WriteLine(date3)
      Console.WriteLine(date4)
      Console.WriteLine(date5)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

12/16/2012 12:00:00 PM
12/16/2012 12:00:52 PM
12/12/2012 10:22:50 PM
12/12/2012 12:00:00 PM

获取当前日期和时间

以下程序演示了如何在VB.Net中获取当前日期和时间 -

当前时间 -

Module dateNtime
   Sub Main()
      Console.Write("Current Time: ")
      Console.WriteLine(Now.ToLongTimeString)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Current Time: 11 :05 :32 AM

Current Date −

Module dateNtime
   Sub Main()
      Console.WriteLine("Current Date: ")
      Dim dt As Date = Today
      Console.WriteLine("Today is: {0}", dt)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Today is: 12/11/2012 12:00:00 AM

格式化日期

日期文字应该包含在井号(##)中,并以M/d/yyyy格式指定,例如#12/16/2012#。 否则,您的代码可能会根据运行应用程序的区域设置而更改。

例如,您为2012年2月6日的日期指定了日期文字#2/6/2012#。对于使用mm/dd/yyyy格式的区域设置,这是正常的。 但是,在使用dd/mm/yyyy格式的语言环境中,您的文字将编译为2012年6月2日。如果语言环境使用另一种格式,例如yyyy/mm/dd,则文字将无效并导致编译器错误。

要将Date文本转换为语言环境的格式或自定义格式,请使用String类的Format函数,指定预定义或用户定义的日期格式。

以下示例演示了这一点。

Module dateNtime
   Sub Main()
      Console.WriteLine("India Wins Freedom: ")
      Dim independenceDay As New Date(1947, 8, 15, 0, 0, 0)
      ' Use format specifiers to control the date display.
      Console.WriteLine(" Format 'd:' " & independenceDay.ToString("d"))
      Console.WriteLine(" Format 'D:' " & independenceDay.ToString("D"))
      Console.WriteLine(" Format 't:' " & independenceDay.ToString("t"))
      Console.WriteLine(" Format 'T:' " & independenceDay.ToString("T"))
      Console.WriteLine(" Format 'f:' " & independenceDay.ToString("f"))
      Console.WriteLine(" Format 'F:' " & independenceDay.ToString("F"))
      Console.WriteLine(" Format 'g:' " & independenceDay.ToString("g"))
      Console.WriteLine(" Format 'G:' " & independenceDay.ToString("G"))
      Console.WriteLine(" Format 'M:' " & independenceDay.ToString("M"))
      Console.WriteLine(" Format 'R:' " & independenceDay.ToString("R"))
      Console.WriteLine(" Format 'y:' " & independenceDay.ToString("y"))
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

India Wins Freedom:
Format 'd:' 8/15/1947
Format 'D:' Friday, August 15, 1947
Format 't:' 12:00 AM
Format 'T:' 12:00:00 AM
Format 'f:' Friday, August 15, 1947 12:00 AM
Format 'F:' Friday, August 15, 1947 12:00:00 AM
Format 'g:' 8/15/1947 12:00 AM
Format 'G:' 8/15/1947 12:00:00 AM
Format 'M:' 8/15/1947 August 15
Format 'R:' Fri, 15 August 1947 00:00:00 GMT
Format 'y:' August, 1947

预定义的日期/时间格式

下表标识了预定义的日期和时间格式名称。 这些可以通过名称用作Format函数的样式参数 -

格式 描述
General Date, or G 显示日期和/或时间。 例如,2012年1月12日上午07:07:30。
Long Date,Medium Date, or D 根据您当前文化的长日期格式显示日期。 例如,2012年12月16日星期日。
Short Date, or d 使用当前文化的短日期格式显示日期。 例如,12/12/2012。
Long Time,Medium Time, orT 使用您当前文化的长时间格式显示时间; 通常包括小时,分钟,秒。 例如,01:07:30 AM。
Short Time or t 使用当前文化的短时间格式显示时间。 例如,上午11:07。
f 根据您当前的文化格式显示长日期和短时间。 例如,2012年12月16日星期日上午12:15。
F 根据您当前的文化格式显示长日期和长时间。 例如,2012年12月16日星期日上午12:15:31。
g 根据您当前的文化格式显示短日期和短时间。 例如,12/16/2012 12:15 AM。
M, m 显示日期的月份和日期。 例如,12月16日。
R, r 根据RFC1123Pattern属性格式化日期。
s 将日期和时间格式化为可排序索引。 例如,2012-12-16T12:07:31。
u 将日期和时间格式化为GMT可排序索引。 例如,2012-12-16 12:15:31Z。
U 使用长日期和长时间格式化日期和时间作为GMT。 例如,2012年12月16日星期日下午6:07:31。
Y, y 将日期格式化为年和月。 例如,2012年12月。

对于其他格式(如用户定义的格式),请参阅Microsoft文档

DateAndTime类的属性和方法

下表列出了DateAndTime类的一些常用properties -

Sr.No 财产和描述
1

Date

根据您的系统返回或设置表示当前日期的String值。

2

Now

根据您的系统返回包含当前日期和时间的Date值。

3

TimeOfDay

根据您的系统返回或设置包含当前时间的Date值。

4

Timer

返回一个Double值,表示自午夜起经过的秒数。

5

TimeString

根据您的系统返回或设置表示当前时间的String值。

6

Today

获取当前日期。

下表列出了DateAndTime类的一些常用methods -

Sr.No 方法名称和描述
1

Public Shared Function DateAdd (Interval As DateInterval, Number As Double, DateValue As DateTime) As DateTime

返回Date值,其中包含已添加指定时间间隔的日期和时间值。

2

Public Shared Function DateAdd (Interval As String,Number As Double,DateValue As Object ) As DateTime

返回Date值,其中包含已添加指定时间间隔的日期和时间值。

3

Public Shared Function DateDiff (Interval As DateInterval, Date1 As DateTime, Date2 As DateTime, DayOfWeek As FirstDayOfWeek, WeekOfYear As FirstWeekOfYear ) As Long

返回Long值,指定两个Date值之间的时间间隔数。

4

Public Shared Function DatePart (Interval As DateInterval, DateValue As DateTime, FirstDayOfWeekValue As FirstDayOfWeek, FirstWeekOfYearValue As FirstWeekOfYear ) As Integer

返回包含给定Date值的指定组件的Integer值。

5

Public Shared Function Day (DateValue As DateTime) As Integer

返回1到31之间的Integer值,表示该月的某天。

6

Public Shared Function Hour (TimeValue As DateTime) As Integer

返回0到23之间的整数值,表示一天中的小时。

7

Public Shared Function Minute (TimeValue As DateTime) As Integer

返回0到59之间的整数值,表示小时的分钟。

8

Public Shared Function Month (DateValue As DateTime) As Integer

返回1到12之间的整数值,表示一年中的月份。

9

Public Shared Function MonthName (Month As Integer, Abbreviate As Boolean) As String

返回包含指定月份名称的String值。

10

Public Shared Function Second (TimeValue As DateTime) As Integer

返回0到59之间的整数值,表示分钟的第二个。

11

Public Overridable Function ToString As String

返回表示当前对象的字符串。

12

Public Shared Function Weekday (DateValue As DateTime, DayOfWeek As FirstDayOfWeek) As Integer

返回一个Integer值,其中包含表示星期几的数字。

13

Public Shared Function WeekdayName (Weekday As Integer, Abbreviate As Boolean, FirstDayOfWeekValue As FirstDayOfWeek) As String

返回包含指定工作日名称的String值。

14

Public Shared Function Year (DateValue As DateTime) As Integer

返回表示年份的1到9999之间的Integer值。

以上列表并非详尽无遗。 有关DateAndTime类的属性和方法的完整列表,请参阅Microsoft文档

以下程序演示了其中一些和方法 -

Module Module1
   Sub Main()
      Dim birthday As Date
      Dim bday As Integer
      Dim month As Integer
      Dim monthname As String
      ' Assign a date using standard short format.
      birthday = #7/27/1998#
      bday = Microsoft.VisualBasic.DateAndTime.Day(birthday)
      month = Microsoft.VisualBasic.DateAndTime.Month(birthday)
      monthname = Microsoft.VisualBasic.DateAndTime.MonthName(month)
      Console.WriteLine(birthday)
      Console.WriteLine(bday)
      Console.WriteLine(month)
      Console.WriteLine(monthname)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

7/27/1998 12:00:00 AM
27
7
July

VB.Net - Arrays

数组存储相同类型的固定大小的顺序元素集合。 数组用于存储数据集合,但将数组视为相同类型的变量集合通常更有用。

所有阵列都包含连续的内存位置。 最低地址对应于第一个元素,最高地址对应于最后一个元素。

VB.Net中的数组

在VB.Net中创建数组

要在VB.Net中声明数组,请使用Dim语句。 例如,

Dim intData(30)	  ' an array of 31 elements
Dim strData(20) As String	' an array of 21 strings
Dim twoDarray(10, 20) As Integer	'a two dimensional array of integers
Dim ranges(10, 100)	 'a two dimensional array

您还可以在声明数组时初始化数组元素。 例如,

Dim intData() As Integer = {12, 16, 20, 24, 28, 32}
Dim names() As String = {"Karthik", "Sandhya", _
"Shivangi", "Ashwitha", "Somnath"}
Dim miscData() As Object = {"Hello World", 12d, 16ui, "A"c}

可以使用数组的索引存储和访问数组中的元素。 以下程序演示了这一点 -

Module arrayApl
   Sub Main()
      Dim n(10) As Integer ' n is an array of 11 integers '
      Dim i, j As Integer
      ' initialize elements of array n '         
      For i = 0 To 10
          n(i) = i + 100 ' set element at location i to i + 100 
      Next i
      ' output each array element's value '
      For j = 0 To 10
          Console.WriteLine("Element({0}) = {1}", j, n(j))
      Next j
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Element(0) = 100
Element(1) = 101
Element(2) = 102
Element(3) = 103
Element(4) = 104
Element(5) = 105
Element(6) = 106
Element(7) = 107
Element(8) = 108
Element(9) = 109
Element(10) = 110

动态数组

动态数组是可以根据程序的需要确定尺寸和重新标注尺寸的数组。 您可以使用ReDim语句声明动态数组。

ReDim语句的语法 -

ReDim [Preserve] arrayname(subscripts)

Where,

  • 当您调整大小时, Preserve关键字有助于保留现有数组中的数据。

  • arrayname是要重新维度的数组的名称。

  • subscripts指定新维度。

Module arrayApl
   Sub Main()
      Dim marks() As Integer
      ReDim marks(2)
      marks(0) = 85
      marks(1) = 75
      marks(2) = 90
      ReDim Preserve marks(10)
      marks(3) = 80
      marks(4) = 76
      marks(5) = 92
      marks(6) = 99
      marks(7) = 79
      marks(8) = 75
      For i = 0 To 10
         Console.WriteLine(i & vbTab & marks(i))
      Next i
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

0	85
1	75
2	90
3	80
4	76
5	92
6	99
7	79
8	75
9	0
10	0

多维数组

VB.Net允许多维数组。 多维数组也称为矩形数组。

您可以将二维数组的字符串声明为 -

Dim twoDStringArray(10, 20) As String

或者,一个整数变量的三维数组 -

Dim threeDIntArray(10, 10, 10) As Integer

以下程序演示了如何创建和使用二维数组 -

Module arrayApl
   Sub Main()
      ' an array with 5 rows and 2 columns
      Dim a(,) As Integer = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}}
      Dim i, j As Integer
      ' output each array element's value '
      For i = 0 To 4
          For j = 0 To 1
              Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i, j))
          Next j
      Next i
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

a[0,0]: 0
a[0,1]: 0
a[1,0]: 1
a[1,1]: 2
a[2,0]: 2
a[2,1]: 4
a[3,0]: 3
a[3,1]: 6
a[4,0]: 4
a[4,1]: 8

锯齿状阵列

Jagged数组是一个数组数组。 以下代码显示了一个名为scores of Integers的锯齿状数组 -

Dim scores As Integer()() = New Integer(5)(){}

以下示例说明了使用锯齿状数组 -

Module arrayApl
   Sub Main()
      'a jagged array of 5 array of integers
      Dim a As Integer()() = New Integer(4)() {}
      a(0) = New Integer() {0, 0}
      a(1) = New Integer() {1, 2}
      a(2) = New Integer() {2, 4}
      a(3) = New Integer() {3, 6}
      a(4) = New Integer() {4, 8}
      Dim i, j As Integer
      ' output each array element's value 
      For i = 0 To 4
         For j = 0 To 1
            Console.WriteLine("a[{0},{1}] = {2}", i, j, a(i)(j))
         Next j
      Next i
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8

数组类

Array类是VB.Net中所有数组的基类。 它在System命名空间中定义。 Array类提供了各种用于处理数组的属性和方法。

数组类的属性

下表提供了Array类的一些最常用的properties -

Sr.No 物业名称和描述
1

IsFixedSize

获取一个值,该值指示Array是否具有固定大小。

2

IsReadOnly

获取一个值,该值指示Array是否为只读。

3

Length

获取一个32位整数,表示Array的所有维度中的元素总数。

4

LongLength

获取一个64位整数,表示Array的所有维度中的元素总数。

5

Rank

获取Array的等级(维数)。

数组类的方法

下表提供了Array类中一些最常用的methods -

Sr.No 方法名称和描述
1

Public Shared Sub Clear (array As Array, index As Integer, length As Integer)

根据元素类型,将Array中的元素范围设置为零,为false或为null。

2

Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer)

从第一个元素开始复制Array中的一系列元素,并从第一个元素开始将它们粘贴到另一个Array中。 长度指定为32位整数。

3

Public Sub CopyTo (array As Array, index As Integer)

将当前一维Array的所有元素复制到指定的一维Array,从指定的目标Array索引开始。 索引指定为32位整数。

4

Public Function GetLength (dimension As Integer) As Integer

获取一个32位整数,表示Array指定维度中的元素数。

5

Public Function GetLongLength (dimension As Integer) As Long

获取一个64位整数,表示Array指定维度中的元素数。

6

Public Function GetLowerBound (dimension As Integer) As Integer

获取Array中指定维度的下限。

7

Public Function GetType As Type

获取当前实例的Type(继承自Object)。

8

Public Function GetUpperBound (dimension As Integer) As Integer

获取Array中指定维度的上限。

9

Public Function GetValue (index As Integer) As Object

获取一维Array中指定位置的值。 索引指定为32位整数。

10

Public Shared Function IndexOf (array As Array,value As Object) As Integer

搜索指定的对象并返回整个一维Array中第一个匹配项的索引。

11

Public Shared Sub Reverse (array As Array)

反转整个一维数组中元素的顺序。

12

Public Sub SetValue (value As Object, index As Integer)

为一维数组中指定位置的元素设置一个值。 索引指定为32位整数。

13

Public Shared Sub Sort (array As Array)

使用Array的每个元素的IComparable实现对整个一维Array中的元素进行排序。

14

Public Overridable Function ToString As String

返回表示当前对象的字符串(从Object继承)。

有关Array类属性和方法的完整列表,请参阅Microsoft文档。

例子 (Example)

以下程序演示了使用Array类的一些方法:

Module arrayApl
   Sub Main()
      Dim list As Integer() = {34, 72, 13, 44, 25, 30, 10}
      Dim temp As Integer() = list
      Dim i As Integer
      Console.Write("Original Array: ")
      For Each i In list
         Console.Write("{0} ", i)
      Next i
      Console.WriteLine()
      ' reverse the array
      Array.Reverse(temp)
      Console.Write("Reversed Array: ")
      For Each i In temp
         Console.Write("{0} ", i)
      Next i
      Console.WriteLine()
      'sort the array
      Array.Sort(list)
      Console.Write("Sorted Array: ")
      For Each i In list
         Console.Write("{0} ", i)
      Next i
      Console.WriteLine()
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Original Array: 34 72 13 44 25 30 10
Reversed Array: 10 30 25 44 13 72 34
Sorted Array: 10 13 25 30 34 44 72

VB.Net - Collections

集合类是用于数据存储和检索的专用类。 这些类为堆栈,队列,列表和哈希表提供支持。 大多数集合类实现相同的接口。

集合类用于各种目的,例如动态地为元素分配内存和基于索引等访问项目列表。这些类创建Object类的对象集合,这是VB中所有数据类型的基类。 。净。

各种集合类及其用法

以下是System.Collection命名空间的各种常用类。 单击以下链接以查看其详细信息。

描述和用途

ArrayList

它表示可以单独indexed的对象的有序集合。

它基本上是数组的替代品。 但是,与数组不同,您可以使用index在指定位置的列表中添加和删除项目,并且数组会自动调整其大小。 它还允许动态内存分配,添加,搜索和排序列表中的项目。

Hashtable

它使用key来访问集合中的元素。

当您需要使用密钥访问元素时,将使用哈希表,并且您可以识别有用的键值。 哈希表中的每个项都有一个key/value对。 该键用于访问集合中的项目。

SortedList

它使用keyindex来访问列表中的项目。

排序列表是数组和哈希表的组合。 它包含可以使用键或索引访问的项目列表。 如果使用索引访问项目,则它是ArrayList,如果使用键访问项目,则它是Hashtable。 项目集合始终按键值排序。

Stack

它代表了一个last-in, first out的对象集合。

当您需要后进先出的项目访问时使用它。 当你在列表中添加一个项目时,它被称为pushing项目,当你删除它时,它被称为popping项目。

Queue

它代表了first-in, first out的对象集合。

当您需要先进先出的物品时,可以使用它。 在列表中添加项目时,它将被称为enqueue ,当您删除项目时,它将被称为deque

BitArray

它表示使用值1和0的binary representation表示的数组。

它在您需要存储位但未提前知道位数时使用。 您可以使用从零开始的integer index来访问BitArray集合中的项目。

VB.Net - 函数

过程是一组在调用时一起执行任务的语句。 执行该过程后,控件返回到调用该过程的语句。 VB.Net有两种类型的程序 -

  • Functions

  • 子程序或子程序

函数返回值,而Subs不返回值。

定义一个函数 (Defining a Function)

Function语句用于声明函数的名称,参数和主体。 Function语句的语法是 -

[Modifiers] Function FunctionName [(ParameterList)] As ReturnType
   [Statements]
End Function

Where,

  • Modifiers - 指定函数的访问级别; 可能的值包括:公共,私人,受保护,朋友,受保护的朋友以及有关重载,覆盖,共享和阴影的信息。

  • FunctionName - 表示FunctionName的名称

  • ParameterList - 指定ParameterList列表

  • ReturnType - 指定函数返回的变量的数据类型

例子 (Example)

下面的代码片段显示了一个函数FindMax ,它接受两个整数值并返回两者中较大的一个。

Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
   ' local variable declaration */
   Dim result As Integer
   If (num1 > num2) Then
      result = num1
   Else
      result = num2
   End If
   FindMax = result
End Function

函数返回值

在VB.Net中,函数可以通过两种方式向调用代码返回一个值 -

  • By using the return statement

  • 通过将值分配给函数名称

以下示例演示如何使用FindMax函数 -

Module myfunctions
   Function FindMax(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
      ' local variable declaration */
      Dim result As Integer
      If (num1 > num2) Then
         result = num1
      Else
         result = num2
      End If
      FindMax = result
   End Function
   Sub Main()
      Dim a As Integer = 100
      Dim b As Integer = 200
      Dim res As Integer
      res = FindMax(a, b)
      Console.WriteLine("Max value is : {0}", res)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Max value is : 200

递归函数

一个函数可以调用自己。 这称为递归。 以下是使用递归函数计算给定数字的阶乘的示例 -

Module myfunctions
   Function factorial(ByVal num As Integer) As Integer
      ' local variable declaration */
      Dim result As Integer
      If (num = 1) Then
         Return 1
      Else
         result = factorial(num - 1) * num
         Return result
      End If
   End Function
   Sub Main()
      'calling the factorial method
      Console.WriteLine("Factorial of 6 is : {0}", factorial(6))
      Console.WriteLine("Factorial of 7 is : {0}", factorial(7))
      Console.WriteLine("Factorial of 8 is : {0}", factorial(8))
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Factorial of 6 is: 720
Factorial of 7 is: 5040
Factorial of 8 is: 40320

Param Arrays

有时,在声明函数或子过程时,您不确定作为参数传递的参数数量。 VB.Net param数组(或参数数组)在这些时候开始提供帮助。

以下示例演示了这一点 -

Module myparamfunc
   Function AddElements(ParamArray arr As Integer()) As Integer
      Dim sum As Integer = 0
      Dim i As Integer = 0
      For Each i In arr
         sum += i
      Next i
      Return sum
   End Function
   Sub Main()
      Dim sum As Integer
      sum = AddElements(512, 720, 250, 567, 889)
      Console.WriteLine("The sum is: {0}", sum)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

The sum is: 2938

将数组作为函数参数传递

您可以在VB.Net中将数组作为函数参数传递。 以下示例演示了这一点 -

Module arrayParameter
   Function getAverage(ByVal arr As Integer(), ByVal size As Integer) As Double
      'local variables
      Dim i As Integer
      Dim avg As Double
      Dim sum As Integer = 0
      For i = 0 To size - 1
         sum += arr(i)
      Next i
      avg = sum/size
      Return avg
   End Function
   Sub Main()
      ' an int array with 5 elements '
      Dim balance As Integer() = {1000, 2, 3, 17, 50}
      Dim avg As Double
      'pass pointer to the array as an argument 
      avg = getAverage(balance, 5)
      ' output the returned value '
      Console.WriteLine("Average value is: {0} ", avg)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Average value is: 214.4

VB.Net - Sub Procedures

正如我们在前一章中提到的,Sub过程是不返回任何值的过程。 我们在所有示例中都使用了Sub过程Main。 到目前为止,我们一直在编写控制台应用程序。 当这些应用程序启动时,控件转到Main Sub过程,然后它运行构成程序主体的任何其他语句。

定义子程序

Sub语句用于声明子过程的名称,参数和主体。 Sub语句的语法是 -

[Modifiers] Sub SubName [(ParameterList)] 
   [Statements]
End Sub

Where,

  • Modifiers - 指定过程的访问级别; 可能的值包括 - 公共,私人,受保护,朋友,受保护的朋友以及有关重载,覆盖,共享和阴影的信息。

  • SubName - 表示Sub的名称

  • ParameterList - 指定ParameterList列表

例子 (Example)

以下示例演示了一个Sub过程CalculatePay ,它接受两个参数hourswages并显示员工的总工资 -

Module mysub
   Sub CalculatePay(ByRef hours As Double, ByRef wage As Decimal)
      'local variable declaration
      Dim pay As Double
      pay = hours * wage
      Console.WriteLine("Total Pay: {0:C}", pay)
   End Sub
   Sub Main()
      'calling the CalculatePay Sub Procedure
      CalculatePay(25, 10)
      CalculatePay(40, 20)
      CalculatePay(30, 27.5)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Total Pay: $250.00
Total Pay: $800.00
Total Pay: $825.00

按值传递参数

这是将参数传递给方法的默认机制。 在此机制中,调用方法时,会为每个值参数创建新的存储位置。 将实际参数的值复制到它们中。 因此,对方法内部参数所做的更改对参数没有影响。

在VB.Net中,使用ByVal关键字声明引用参数。 以下示例演示了该概念 -

Module paramByval
   Sub swap(ByVal x As Integer, ByVal y As Integer)
      Dim temp As Integer
      temp = x ' save the value of x 
      x = y    ' put y into x 
      y = temp 'put temp into y 
   End Sub
   Sub Main()
      ' local variable definition 
      Dim a As Integer = 100
      Dim b As Integer = 200
      Console.WriteLine("Before swap, value of a : {0}", a)
      Console.WriteLine("Before swap, value of b : {0}", b)
      ' calling a function to swap the values '
      swap(a, b)
      Console.WriteLine("After swap, value of a : {0}", a)
      Console.WriteLine("After swap, value of b : {0}", b)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200

它表明尽管在函数内部已经更改,但值没有变化。

通过引用传递参数

引用参数是对变量的内存位置的引用。 通过引用传递参数时,与值参数不同,不会为这些参数创建新的存储位置。 参考参数表示与提供给方法的实际参数相同的存储器位置。

在VB.Net中,使用ByRef关键字声明引用参数。 以下示例演示了这一点 -

Module paramByref
   Sub swap(ByRef x As Integer, ByRef y As Integer)
      Dim temp As Integer
      temp = x ' save the value of x 
      x = y    ' put y into x 
      y = temp 'put temp into y 
   End Sub
   Sub Main()
      ' local variable definition 
      Dim a As Integer = 100
      Dim b As Integer = 200
      Console.WriteLine("Before swap, value of a : {0}", a)
      Console.WriteLine("Before swap, value of b : {0}", b)
      ' calling a function to swap the values '
      swap(a, b)
      Console.WriteLine("After swap, value of a : {0}", a)
      Console.WriteLine("After swap, value of b : {0}", b)
      Console.ReadLine()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 200
After swap, value of b : 100

VB.Net - Classes & Objects

定义类时,可以为数据类型定义蓝图。 这实际上并没有定义任何数据,但它确实定义了类名的含义,即类的对象将包含什么以及可以对这样的对象执行什么操作。

对象是类的实例。 构成类的方法和变量称为类的成员。

类定义

类定义以关键字Class开头,后跟类名; 和类主体,以End Class语句结束。 以下是类定义的一般形式 -

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
   [ Inherits classname ]
   [ Implements interfacenames ]
   [ statements ]
End Class

Where,

  • attributelist是适用于该类的属性列表。 可选的。

  • accessmodifier定义了类的访问级别,它的值为 - Public,Protected,Friend,Protected Friend和Private。 可选的。

  • Shadows表示变量在基类中重新声明并隐藏一个具有相同名称的元素或一组重载元素。 可选的。

  • MustInherit指定该类只能用作基类,并且不能直接从它创建对象,即抽象类。 可选的。

  • NotInheritable指定该类不能用作基类。

  • Partial表示该类的部分定义。

  • Inherits指定它继承的基类。

  • Implements指定类继承的接口。

以下示例演示了一个Box类,其中包含三个数据成员,长度,宽度和高度 -

Module mybox
   Class Box
      Public length As Double   ' Length of a box
      Public breadth As Double  ' Breadth of a box
      Public height As Double   ' Height of a box
   End Class
   Sub Main()
      Dim Box1 As Box = New Box()        ' Declare Box1 of type Box
      Dim Box2 As Box = New Box()        ' Declare Box2 of type Box
      Dim volume As Double = 0.0         ' Store the volume of a box here
      ' box 1 specification
      Box1.height = 5.0
      Box1.length = 6.0
      Box1.breadth = 7.0
      ' box 2 specification
      Box2.height = 10.0
      Box2.length = 12.0	
      Box2.breadth = 13.0
      'volume of box 1
      volume = Box1.height * Box1.length * Box1.breadth
      Console.WriteLine("Volume of Box1 : {0}", volume)
      'volume of box 2
      volume = Box2.height * Box2.length * Box2.breadth
      Console.WriteLine("Volume of Box2 : {0}", volume)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Volume of Box1 : 210
Volume of Box2 : 1560

成员函数和封装

类的成员函数是一个函数,它在类定义中的定义或原型与任何其他变量一样。 它对作为其成员的类的任何对象进行操作,并且可以访问该对象的类的所有成员。

成员变量是对象的属性(从设计角度来看),它们保持私有以实现封装。 只能使用公共成员函数访问这些变量。

让我们在上面的概念中设置并获取类中不同类成员的值 -

Module mybox
   Class Box
      Public length As Double    ' Length of a box
      Public breadth As Double   ' Breadth of a box
      Public height As Double    ' Height of a box
      Public Sub setLength(ByVal len As Double)
         length = len
      End Sub
      Public Sub setBreadth(ByVal bre As Double)
         breadth = bre
      End Sub
      Public Sub setHeight(ByVal hei As Double)
         height = hei
      End Sub
      Public Function getVolume() As Double
         Return length * breadth * height
      End Function
   End Class
   Sub Main()
      Dim Box1 As Box = New Box()        ' Declare Box1 of type Box
      Dim Box2 As Box = New Box()        ' Declare Box2 of type Box
      Dim volume As Double = 0.0         ' Store the volume of a box here
      ' box 1 specification
      Box1.setLength(6.0)
      Box1.setBreadth(7.0)
      Box1.setHeight(5.0)
      'box 2 specification
      Box2.setLength(12.0)
      Box2.setBreadth(13.0)
      Box2.setHeight(10.0)
      ' volume of box 1
      volume = Box1.getVolume()
      Console.WriteLine("Volume of Box1 : {0}", volume)
      'volume of box 2
      volume = Box2.getVolume()
      Console.WriteLine("Volume of Box2 : {0}", volume)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Volume of Box1 : 210
Volume of Box2 : 1560

构造函数和析构函数

constructor是类的特殊成员Sub,只要我们创建该类的新对象,就会执行该类。 构造函数的名称为New ,它没有任何返回类型。

以下程序解释了构造函数的概念 -

Class Line
   Private length As Double    ' Length of a line
   Public Sub New()   'constructor
      Console.WriteLine("Object is being created")
   End Sub
   Public Sub setLength(ByVal len As Double)
      length = len
   End Sub
   Public Function getLength() As Double
      Return length
   End Function
   Shared Sub Main()
      Dim line As Line = New Line()
      'set line length
      line.setLength(6.0)
      Console.WriteLine("Length of line : {0}", line.getLength())
      Console.ReadKey()
   End Sub
End Class

编译并执行上述代码时,会产生以下结果 -

Object is being created
Length of line : 6

默认构造函数没有任何参数,但如果需要,构造函数可以有参数。 这种构造函数称为parameterized constructors 。 此技术可帮助您在创建对象时为其分配初始值,如以下示例所示 -

Class Line
   Private length As Double    ' Length of a line
   Public Sub New(ByVal len As Double)   'parameterised constructor
      Console.WriteLine("Object is being created, length = {0}", len)
      length = len
   End Sub
   Public Sub setLength(ByVal len As Double)
      length = len
   End Sub
   Public Function getLength() As Double
      Return length
   End Function
   Shared Sub Main()
      Dim line As Line = New Line(10.0)
      Console.WriteLine("Length of line set by constructor : {0}", line.getLength())
      'set line length
      line.setLength(6.0)
      Console.WriteLine("Length of line set by setLength : {0}", line.getLength())
      Console.ReadKey()
   End Sub
End Class

编译并执行上述代码时,会产生以下结果 -

Object is being created, length = 10
Length of line set by constructor : 10
Length of line set by setLength : 6

destructor是类的特殊成员Sub,只要其类的对象超出范围,就会执行该类。

destructor的名称为Finalize ,它既不能返回值,也不能接受任何参数。 析构函数对于在退出程序之前释放资源非常有用,例如关闭文件,释放内存等。

析构函数不能被继承或重载。

以下示例解释了析构函数的概念 -

Class Line
   Private length As Double    ' Length of a line
   Public Sub New()   'parameterised constructor
      Console.WriteLine("Object is being created")
   End Sub
   Protected Overrides Sub Finalize()  ' destructor
      Console.WriteLine("Object is being deleted")
   End Sub
   Public Sub setLength(ByVal len As Double)
      length = len
   End Sub
   Public Function getLength() As Double
      Return length
   End Function
   Shared Sub Main()
      Dim line As Line = New Line()
      'set line length
      line.setLength(6.0)
      Console.WriteLine("Length of line : {0}", line.getLength())
      Console.ReadKey()
   End Sub
End Class

编译并执行上述代码时,会产生以下结果 -

Object is being created
Length of line : 6
Object is being deleted

VB.Net类的共享成员

我们可以使用Shared关键字将类成员定义为静态。 当我们将一个类的成员声明为Shared时,这意味着无论创建了多少个类的对象,该成员只有一个副本。

关键字Shared表示类中只存在一个成员实例。 共享变量用于定义常量,因为可以通过调用类来检索它们的值,而无需创建它的实例。

共享变量可以在成员函数或类定义之外初始化。 您还可以在类定义中初始化共享变量。

您还可以将成员函数声明为Shared。 此类函数只能访问共享变量。 甚至在创建对象之前就存在共享功能。

以下示例演示了共享成员的使用 -

Class StaticVar
   Public Shared num As Integer
   Public Sub count()
      num = num + 1
   End Sub
   Public Shared Function getNum() As Integer
      Return num
   End Function
   Shared Sub Main()
      Dim s As StaticVar = New StaticVar()
      s.count()
      s.count()
      s.count()
      Console.WriteLine("Value of variable num: {0}", StaticVar.getNum())
      Console.ReadKey()
   End Sub
End Class

编译并执行上述代码时,会产生以下结果 -

Value of variable num: 3

继承 (Inheritance)

面向对象编程中最重要的概念之一是继承。 继承允许我们根据另一个类定义一个类,这样可以更容易地创建和维护一个应用程序。 这也提供了重用代码功能和快速实现时间的机会。

在创建类时,程序员可以指定新类应该继承现有类的成员,而不是编写全新的数据成员和成员函数。 此现有类称为base类,新类称为derived类。

基础和派生类

类可以从多个类或接口派生,这意味着它可以从多个基类或接口继承数据和函数。

VB.Net中用于创建派生类的语法如下 -

<access-specifier> Class <base_class>
...
End Class
Class <derived_class>: Inherits <base_class>
...
End Class

考虑一个基类Shape及其派生类Rectangle -

' Base class
Class Shape
   Protected width As Integer
   Protected height As Integer
   Public Sub setWidth(ByVal w As Integer)
      width = w
   End Sub
   Public Sub setHeight(ByVal h As Integer)
      height = h
   End Sub
End Class
' Derived class
Class Rectangle : Inherits Shape
   Public Function getArea() As Integer
      Return (width * height)
   End Function
End Class
Class RectangleTester
   Shared Sub Main()
      Dim rect As Rectangle = New Rectangle()
      rect.setWidth(5)
      rect.setHeight(7)
      ' Print the area of the object.
      Console.WriteLine("Total area: {0}", rect.getArea())
      Console.ReadKey()
   End Sub	
End Class

编译并执行上述代码时,会产生以下结果 -

Total area: 35

基类初始化

派生类继承基类成员变量和成员方法。 因此,应在创建子类之前创建超类对象。 超类或基类在VB.Net中隐含地称为MyBase

以下程序演示了这一点 -

' Base class
Class Rectangle
   Protected width As Double
   Protected length As Double
   Public Sub New(ByVal l As Double, ByVal w As Double)
      length = l
      width = w
   End Sub
   Public Function GetArea() As Double
      Return (width * length)
   End Function
   Public Overridable Sub Display()
      Console.WriteLine("Length: {0}", length)
      Console.WriteLine("Width: {0}", width)
      Console.WriteLine("Area: {0}", GetArea())
   End Sub
   'end class Rectangle  
End Class
'Derived class
Class Tabletop : Inherits Rectangle
   Private cost As Double
   Public Sub New(ByVal l As Double, ByVal w As Double)
      MyBase.New(l, w)
   End Sub
   Public Function GetCost() As Double
      Dim cost As Double
      cost = GetArea() * 70
      Return cost
   End Function
   Public Overrides Sub Display()
      MyBase.Display()
      Console.WriteLine("Cost: {0}", GetCost())
   End Sub
    'end class Tabletop
End Class
Class RectangleTester
   Shared Sub Main()
      Dim t As Tabletop = New Tabletop(4.5, 7.5)
      t.Display()
      Console.ReadKey()
   End Sub
End Class

编译并执行上述代码时,会产生以下结果 -

Length: 4.5
Width: 7.5
Area: 33.75
Cost: 2362.5

VB.Net支持多重继承。

VB.Net - Exception Handling

例外是在执行程序期间出现的问题。 例外是对程序运行时出现的异常情况的响应,例如尝试除以零。

例外提供了一种将控制从程序的一个部分转移到另一个部分的方法。 VB.Net异常处理基于四个关键字 - TryCatchFinallyThrow

  • Try - Try块标识将激活特定异常的代码块。 接下来是一个或多个Catch块。

  • Catch - 程序在您要处理问题的程序中的位置捕获异常处理程序的异常。 Catch关键字表示捕获异常。

  • Finally - Finally块用于执行一组给定的语句,无论是抛出还是不抛出异常。 例如,如果打开文件,则必须关闭它是否引发异常。

  • Throw - 当问题出现时,程序会抛出异常。 这是使用Throw关键字完成的。

语法 (Syntax)

假设一个块将引发异常,则方法使用Try和Catch关键字的组合捕获异常。 Try/Catch块放在可能生成异常的代码周围。 Try/Catch块中的代码称为受保护代码,使用Try/Catch的语法如下所示 -

Try
   [ tryStatements ]
   [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
   [ catchStatements ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finallyStatements ] ]
End Try

如果try块在不同情况下引发多个异常,您可以列出多个catch语句以捕获不同类型的异常。

.Net Framework中的异常类

在.Net Framework中,异常由类表示。 .Net Framework中的异常类主要直接或间接地从System.Exception类派生。 从System.Exception类派生的一些异常类是System.ApplicationExceptionSystem.SystemException类。

System.ApplicationException类支持应用程序生成的异常。 所以程序员定义的异常应该来自这个类。

System.SystemException类是所有预定义系统异常的基类。

下表提供了从Sytem.SystemException类派生的一些预定义异常类 -

例外类 描述
System.IO.IOException 处理I/O错误。
System.IndexOutOfRangeException 处理方法引用数组索引超出范围时生成的错误。
System.ArrayTypeMismatchException 处理类型与数组类型不匹配时生成的错误。
System.NullReferenceException 处理引用空对象生成的错误。
System.DivideByZeroException 处理将被除数除以零所产生的错误。
System.InvalidCastException 处理在类型转换期间生成的错误。
System.OutOfMemoryException 处理由于空闲内存不足而产生的错误。
System.StackOverflowException 处理堆栈溢出产生的错误。

处理例外情况

VB.Net以try和catch块的形式提供了异常处理问题的结构化解决方案。 使用这些块,核心程序语句与错误处理语句分开。

这些错误处理块使用TryCatchFinally关键字实现。 以下是在零条件发生时抛出异常的示例 -

Module exceptionProg
   Sub division(ByVal num1 As Integer, ByVal num2 As Integer)
      Dim result As Integer
      Try
         result = num1\num2
      Catch e As DivideByZeroException
         Console.WriteLine("Exception caught: {0}", e)
      Finally
         Console.WriteLine("Result: {0}", result)
      End Try
   End Sub
   Sub Main()
      division(25, 0)
      Console.ReadKey()
  End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

创建用户定义的异常

您还可以定义自己的例外。 用户定义的异常类派生自ApplicationException类。 以下示例演示了这一点 -

Module exceptionProg
   Public Class TempIsZeroException : Inherits ApplicationException
      Public Sub New(ByVal message As String)
         MyBase.New(message)
      End Sub
   End Class
   Public Class Temperature
      Dim temperature As Integer = 0
      Sub showTemp()
         If (temperature = 0) Then
            Throw (New TempIsZeroException("Zero Temperature found"))
         Else
            Console.WriteLine("Temperature: {0}", temperature)
         End If
      End Sub
   End Class
   Sub Main()
      Dim temp As Temperature = New Temperature()
      Try
         temp.showTemp()
      Catch e As TempIsZeroException
         Console.WriteLine("TempIsZeroException: {0}", e.Message)
      End Try
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

TempIsZeroException: Zero Temperature found

投掷物体

如果对象直接或间接派生自System.Exception类,则可以抛出该对象。

您可以在catch块中使用throw语句将当前对象抛出为 -

Throw [ expression ]

以下程序演示了这一点 -

Module exceptionProg
   Sub Main()
      Try
         Throw New ApplicationException("A custom exception _ is being thrown here...")
      Catch e As Exception
         Console.WriteLine(e.Message)
      Finally
         Console.WriteLine("Now inside the Finally Block")
      End Try
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

A custom exception is being thrown here...
Now inside the Finally Block

VB.Net - File Handling

file是存储在具有特定名称和目录路径的磁盘中的数据集合。 打开文件进行读取或写入时,它将变为stream

流基本上是通过通信路径的字节序列。 有两个主要流: input streamoutput streaminput stream用于从文件读取数据(读取操作), output stream用于写入文件(写入操作)。

VB.Net I/O类

System.IO命名空间有各种类,用于对文件执行各种操作,如创建和删除文件,读取或写入文件,关闭文件等。

下表显示了System.IO命名空间中一些常用的非抽象类 -

I/O类 描述
BinaryReader 从二进制流中读取原始数据。
BinaryWriter 以二进制格式写入原始数据。
BufferedStream 用于字节流的临时存储。
Directory 帮助操纵目录结构。
DirectoryInfo 用于对目录执行操作。
DriveInfo 提供驱动器的信息。
File 帮助操纵文件。
FileInfo 用于对文件执行操作。
FileStream 用于读取和写入文件中的任何位置。
MemoryStream 用于随机访问存储在内存中的流数据。
Path 对路径信息执行操作。
StreamReader 用于从字节流中读取字符。
StreamWriter 用于将字符写入流。
StringReader 用于从字符串缓冲区读取。
StringWriter 用于写入字符串缓冲区。

FileStream类

System.IO命名空间中的FileStream类有助于读取,写入和关闭文件。 该类派生自抽象类Stream。

您需要创建FileStream对象以创建新文件或打开现有文件。 创建FileStream对象的语法如下 -

Dim <object_name> As FileStream = New FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>)

例如,用于创建FileStream对象F以读取名为sample.txt的文件 -

Dim f1 As FileStream = New FileStream("sample.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)

参数 描述
FileMode

FileMode枚举器定义了打开文件的各种方法。 FileMode枚举器的成员是 -

  • Append - 它打开现有文件并将光标放在文件末尾,或者如果文件不存在则创建文件。

  • Create - 它创建一个新文件。

  • CreateNew - 它向操作系统指定它应该创建一个新文件。

  • Open - 它打开一个现有文件。

  • OpenOrCreate - 它指定操作系统应该打开文件(如果存在),否则应该创建一个新文件。

  • Truncate - 它打开一个现有文件并将其大小截断为零字节。

FileAccess

FileAccess枚举器具有成员: ReadReadWriteWrite

FileShare

FileShare枚举器具有以下成员 -

  • Inheritable - 它允许文件句柄将继承传递给子进程

  • None - 它拒绝当前文件的共享

  • Read - 它允许打开文件进行读取

  • ReadWrite - 它允许打开文件进行读写

  • Write - 它允许打开文件进行写入

例子 (Example)

以下程序演示了使用FileStream类 -

Imports System.IO
Module fileProg
   Sub Main()
      Dim f1 As FileStream = New FileStream("sample.txt", _ FileMode.OpenOrCreate, FileAccess.ReadWrite)
      Dim i As Integer
      For i = 0 To 20
         f1.WriteByte(CByte(i))
      Next i
      f1.Position = 0
      For i = 0 To 20
         Console.Write("{0} ", f1.ReadByte())
      Next i
      f1.Close()
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1

VB.Net中的高级文件操作

前面的示例在VB.Net中提供了简单的文件操作。 但是,要利用System.IO类的巨大功能,您需要知道这些类的常用属性和方法。

我们将在以下部分中讨论这些类及其执行的操作。 请单击提供的链接以进入各个部分 -

Sr.No. 主题和描述
1

读取和写入文本文件

它涉及读取和写入文本文件。 StreamReaderStreamWriter类有助于实现它。

2

读取和写入二进制文件

它涉及读取和写入二进制文件。 BinaryReaderBinaryWriter类有助于实现此目的。

3

操纵Windows文件系统

它为VB.Net程序员提供了浏览和定位Windows文件和目录的能力。

VB.Net - Basic Controls

对象是您使用工具箱控件在Visual Basic窗体上创建的一种用户界面元素。 实际上,在Visual Basic中,表单本身就是一个对象。 每个Visual Basic控件都包含三个重要元素 -

  • 描述对象的Properties

  • Methods导致对象做某事

  • Events就是当一个对象做某事时发生的事情。

控制属性

可以通过设置其属性来移动,调整大小或自定义所有Visual Basic对象。 属性是由Visual Basic对象保存的值或特征,例如Caption或Fore Color。

可以使用“属性”窗口在设计时设置属性,也可以在运行时使用程序代码中的语句设置属性。

Object. Property = Value

哪里

  • Object是您要自定义的对象的名称。

  • Property是您想要改变的特征。

  • Value是新的属性设置。

例如,

Form1.Caption = "Hello"

您可以使用“属性窗口”设置任何表单属性。 在应用程序执行期间,可以设置或读取大多数属性。 您可以参考Microsoft文档以获取与应用于它们的不同控件和限制关联的属性的完整列表。

控制方法

方法是作为类的成员创建的过程,它们使对象执行某些操作。 方法用于访问或操纵对象或变量的特征。 您将在课程中使用两种方法 -

  • 如果您使用的是诸如Toolbox提供的控件之类的控件,则可以调用其任何公共方法。 这种方法的要求取决于所使用的类别。

  • 如果现有方法都不能执行所需任务,则可以向类添加方法。

例如, MessageBox控件有一个名为Show, which is called in the code snippet below −的方法Show, which is called in the code snippet below −方法Show, which is called in the code snippet below −

Public Class Form1
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
   Handles Button1.Click
      MessageBox.Show("Hello, World")
   End Sub
End Class

控制事件

事件是通知应用程序已发生重要事件的信号。 例如,当用户单击窗体上的控件时,窗体可以引发Click事件并调用处理该事件的过程。 有与窗体关联的各种类型的事件,如单击,双击,关闭,加载,调整大小等。

以下是表单Load事件处理程序子例程的默认结构。 您可以通过双击代码来查看此代码,该代码将为您提供与Form控件关联的所有事件的完整列表 -

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   'event handler code goes here
End Sub

这里, Handles MyBase.Load表示Form1_Load()子例程处理Load事件。 类似地,您可以检查存根代码以进行单击,双击。 如果要初始化某些变量(如属性等),则将这些代码保存在Form1_Load()子例程中。 这里需要注意的重要一点是事件处理程序的名称,默认情况下是Form1_Load,但您可以根据您在应用程序编程中使用的命名约定来更改此名称。

基本控制

VB.Net提供了各种各样的控件,可以帮助您创建丰富的用户界面。 所有这些控制的功能在相应的控制类中定义。 控件类在System.Windows.Forms命名空间中定义。

下表列出了一些常用的控件 -

Sr.No. 小部件和描述
1

Forms

构成用户界面的所有控件的容器。

2

TextBox

它表示Windows文本框控件。

3

Label

它代表一个标准的Windows标签。

4

Button

它代表一个Windows按钮控件。

5

ListBox

它表示用于显示项列表的Windows控件。

6

ComboBox

它代表一个Windows组合框控件。

7

RadioButton

它使用户能够在与其他RadioButton控件配对时从一组选项中选择一个选项。

8

CheckBox

它代表一个Windows CheckBox。

9

PictureBox

它表示用于显示图像的Windows图片框控件。

10

ProgressBar

它代表Windows进度条控件。

11

ScrollBar

它实现了滚动条控件的基本功能。

12

DateTimePicker

它表示一个Windows控件,允许用户选择日期和时间,并以指定的格式显示日期和时间。

13

TreeView

它显示标记项的分层集合,每个项由TreeNode表示。

14

ListView

它表示Windows列表视图控件,它显示可以使用四种不同视图之一显示的项目集合。

VB.Net - Dialog Boxes

Windows窗体中有许多内置对话框可用于各种任务,例如打开和保存文件,打印页面,为应用程序用户提供颜色,字体,页面设置等选项。 这些内置对话框可减少开发人员的时间和工作量。

所有这些对话框控件类都继承自CommonDialog类,并重写基类的RunDialog()函数以创建特定的对话框。

当对话框的用户调用其ShowDialog()函数时,将自动调用RunDialog ShowDialog()函数。

ShowDialog方法用于在运行时显示所有对话框控件。 它返回DialogResult枚举类型的值。 DialogResult枚举的值是 -

  • Abort - 当用户单击“中止”按钮时,返回DialogResult.Abort值。

  • Cancel - 当用户单击“取消”按钮时,返回DialogResult.Cancel。

  • Ignore - 当用户单击“忽略”按钮时返回DialogResult.Ignore。

  • No - 返回DialogResult.No,当用户单击否按钮时。

  • None - 不返回任何内容,对话框继续运行。

  • OK - 当用户单击“确定”按钮时,返回DialogResult.OK

  • Retry - 当用户单击“重试”按钮时,返回DialogResult.Retry

  • Yes - 当用户单击是按钮时返回DialogResult.Yes

下图显示了常见的对话框类继承 -

VB.Net对话框

所有这些上述类都有相应的控件,可以在设计时从工具箱中添加。 您可以通过以编程方式实例化类或使用相关控件将这些类的相关功能包含到您的应用程序中。

双击工具箱中的任何对话框控件或将控件拖到窗体上时,它将显示在Windows窗体设计器底部的组件托盘中,它们不会直接显示在窗体上。

下表列出了常用的对话框控件。 点击以下链接查看其详细信息 -

Sr.No. 控制和描述
1

ColorDialog

它表示一个常见的对话框,显示可用的颜色以及使用户能够定义自定义颜色的控件。

2

FontDialog

它会提示用户从本地计算机上安装的字体中选择字体,并让用户选择字体,字体大小和颜色。

3

OpenFileDialog

它会提示用户打开文件并允许用户选择要打开的文件。

4

SaveFileDialog

它提示用户选择保存文件的位置,并允许用户指定要保存数据的文件名。

5

PrintDialog

它允许用户通过选择打印机并从Windows窗体应用程序中选择要打印的文档部分来打印文档。

VB.Net - Advanced Form

在本章中,让我们研究以下概念 -

  • 在应用程序中添加菜单和子菜单

  • 在表单中添加剪切,复制和粘贴功能

  • 表单中的锚定和对接控件

  • 模态形式

在应用程序中添加菜单和子菜单

传统上, MenuMainMenuContextMenuMenuItem类用于在Windows应用程序中添加菜单,子菜单和上下文菜单。

现在, MenuStripToolStripMenuItemToolStripDropDownToolStripDropDownMenu控件替换和添加以前版本的菜单相关控件的功能。 但是,保留旧的控件类以用于向后兼容和将来使用。

让我们首先使用旧版本控件创建一个典型的Windows主菜单栏和子菜单,因为这些控件仍然在旧应用程序中使用得很多。

下面是一个示例,它显示了我们如何使用菜单项创建菜单栏:文件,编辑,视图和项目。 “文件”菜单包含“新建”,“打开”和“保存”子菜单。

让我们双击表单并将以下代码放在打开的窗口中。

Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      'defining the main menu bar
      Dim mnuBar As New MainMenu()
      'defining the menu items for the main menu bar
      Dim myMenuItemFile As New MenuItem("&File")
      Dim myMenuItemEdit As New MenuItem("&Edit")
      Dim myMenuItemView As New MenuItem("&View")
      Dim myMenuItemProject As New MenuItem("&Project")
      'adding the menu items to the main menu bar
      mnuBar.MenuItems.Add(myMenuItemFile)
      mnuBar.MenuItems.Add(myMenuItemEdit)
      mnuBar.MenuItems.Add(myMenuItemView)
      mnuBar.MenuItems.Add(myMenuItemProject)
     ' defining some sub menus
      Dim myMenuItemNew As New MenuItem("&New")
      Dim myMenuItemOpen As New MenuItem("&Open")
      Dim myMenuItemSave As New MenuItem("&Save")
      'add sub menus to the File menu
      myMenuItemFile.MenuItems.Add(myMenuItemNew)
      myMenuItemFile.MenuItems.Add(myMenuItemOpen)
      myMenuItemFile.MenuItems.Add(myMenuItemSave)
      'add the main menu to the form
      Me.Menu = mnuBar
      ' Set the caption bar text of the form.  
      Me.Text = "iowiki.com"
   End Sub
End Class

当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,它将显示以下窗口 -

VB.Net菜单示例

Windows窗体包含一组丰富的类,用于创建具有现代外观,外观和感觉的自定义菜单。 MenuStripToolStripMenuItemContextMenuStrip控件用于有效地创建菜单栏和上下文菜单。

单击以下链接查看其详细信息 -

Sr.No. 控制和描述
1

MenuStrip

它为表单提供了一个菜单系统。

2

ToolStripMenuItem

它表示MenuStripContextMenuStrip上显示的可选选项。 ToolStripMenuItem控件替换以前版本的MenuItem控件并添加功能。

3

ContextMenuStrip

它代表一个快捷菜单。

在表单中添加剪切,复制和粘贴功能

ClipBoard类公开的方法用于在应用程序中添加剪切,复制和粘贴功能。 ClipBoard类提供了在系统剪贴板上放置数据和从中检索数据的方法。

它有以下常用方法 -

Sr.No. 方法名称和描述
1

Clear

从剪贴板中删除所有数据。

2

ContainsData

指示剪贴板上是否存在指定格式的数据或者是否可以转换为该格式。

3

ContainsImage

指示剪贴板上是否存在位图格式的数据,或者可以将其转换为该格式。

4

ContainsText

指示剪贴板上是否有Text或UnicodeText格式的数据,具体取决于操作系统。

5

GetData

以指定格式从剪贴板中检索数据。

6

GetDataObject

检索当前在系统剪贴板上的数据。

7

GetImage

从剪贴板中检索图像。

8

GetText

以Text或UnicodeText格式从剪贴板检索文本数据,具体取决于操作系统。

9

GetText(TextDataFormat)

以指定的TextDataFormat值指示的格式从剪贴板检索文本数据。

10

SetData

清除剪贴板,然后以指定的格式添加数据。

11

SetText(String)

清除剪贴板,然后根据操作系统添加Text或UnicodeText格式的文本数据。

以下是一个示例,其中显示了如何使用Clipboard类的方法剪切,复制和粘贴数据。 采取以下步骤 -

  • 在窗体上添加一个富文本框控件和三个按钮控件。

  • 将按钮的文本属性分别更改为剪切,复制和粘贴。

  • 双击按钮,在代码编辑器中添加以下代码 -

Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) _ 
    Handles MyBase.Load
      ' Set the caption bar text of the form.  
      Me.Text = "iowiki.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) _ 
      Handles Button1.Click
      Clipboard.SetDataObject(RichTextBox1.SelectedText)
      RichTextBox1.SelectedText = ""
   End Sub
   Private Sub Button2_Click(sender As Object, e As EventArgs) _
       Handles Button2.Click
      Clipboard.SetDataObject(RichTextBox1.SelectedText)
   End Sub
   Private Sub Button3_Click(sender As Object, e As EventArgs) _
    Handles Button3.Click
      Dim iData As IDataObject
      iData = Clipboard.GetDataObject()
      If (iData.GetDataPresent(DataFormats.Text)) Then
         RichTextBox1.SelectedText = iData.GetData(DataFormats.Text)
      Else
         RichTextBox1.SelectedText = " "
      End If
   End Sub
End Class

当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口 -

VB.Net剪切,粘贴,复制示例

输入一些文本并检查按钮的工作方式。

在表单中锚定和停靠控件

Anchoring允许您将控件的锚位置设置为其容器控件的边缘,例如表单。 Control类的Anchor属性允许您设置此属性的值。 Anchor属性获取或设置控件绑定到的容器的边缘,并确定如何使用其父控件调整控件的大小。

将控件锚定到窗体时,控件在调整窗体大小时会保持与窗体边缘及其固定位置的距离。

您可以从“属性”窗口设置控件的Anchor属性值 -

VB.Net控件的锚定

例如,让我们在窗体上添加一个Button控件,并将其anchor属性设置为Bottom,Right。 运行此窗体以查看Button控件相对于窗体的原始位置。

VB.Net锚定示例

现在,当您拉伸窗体时,Button与窗体右下角之间的距离保持不变。

VB.Net锚定示例

控制装置的对接意味着将其对接到其容器的一个边缘。 在对接中,控制器完全填充容器的某些区域。

Control类的Dock属性执行此操作。 Dock属性获取或设置哪些控件边框停靠到其父控件,并确定如何使用其父控件调整控件的大小。

您可以从“属性”窗口设置控件的Dock属性值 -

VB.Net控件对接

例如,让我们在窗体上添加一个Button控件,并将其Dock属性设置为Bottom。 运行此窗体以查看Button控件相对于窗体的原始位置。

VB.Net对接示例

现在,当您拉伸表单时,Button会使用表单调整自身大小。

VB.Net对接示例

模态表格

Modal Forms是在您继续使用应用程序的其余部分之前需要关闭或隐藏的表单。 所有对话框都是模态形式。 MessageBox也是一种模态形式。

您可以通过两种方式调用模态表单 -

  • 调用ShowDialog方法

  • 调用Show方法

让我们举一个例子,我们将创建一个模态窗体,一个对话框。 采取以下步骤 -

  • 将表单Form1添加到您的应用程序,并向Form1添加两个标签和一个按钮控件

  • 将第一个标签和按钮的文本属性分别更改为“欢迎使用教程点”和“输入您的名称”。 将第二个标签的文本属性保留为空白。

    VB.Net模态形式示例
  • 添加一个新的Windows窗体,Form2,并向Form2添加两个按钮,一个标签和一个文本框。

  • 将按钮的文本属性分别更改为“确定”和“取消”。 将标签的文本属性更改为“输入您的姓名:”。

  • 将Form2的FormBorderStyle属性设置为FixedDialog ,为其提供一个对话框边框。

  • 将Form2的ControlBox属性设置为False。

  • 将Form2的ShowInTaskbar属性设置为False。

  • 将“确定”按钮的DialogResult属性设置为“确定”,将“取消”按钮设置为“取消”。

VB.Net模态形式示例

在Form2的Form2_Load方法中添加以下代码片段 -

Private Sub Form2_Load(sender As Object, e As EventArgs) _
   Handles MyBase.Load
   AcceptButton = Button1
   CancelButton = Button2
End Sub

在Form1的Button1_Click方法中添加以下代码片段 -

Private Sub Button1_Click(sender As Object, e As EventArgs) _
   Handles Button1.Click
   Dim frmSecond As Form2 = New Form2()
   If frmSecond.ShowDialog() = DialogResult.OK Then
      Label2.Text = frmSecond.TextBox1.Text
   End If
End Sub

当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口 -

VB.Net模态形式示例

点击“输入您的姓名”按钮显示第二个表格 -

VB.Net模态形式示例

单击“确定”按钮可将控件和信息从模态窗体返回到上一个窗体 -

VB.Net模态形式示例

VB.Net - Event Handling

事件基本上是用户操作,如按键,点击,鼠标移动等,或某些事件,如系统生成的通知。 应用程序需要在事件发生时对其进行响应。

单击按钮,或在文本框中输入一些文本,或单击菜单项,所有都是事件的示例。 事件是调用函数或可能导致其他事件的操作。 事件处理程序是告诉如何响应事件的函数。

VB.Net是一种事件驱动的语言。 主要有两种类型的事件 -

  • 鼠标事件

  • 键盘事件

处理鼠标事件

鼠标事件发生在窗体和控件中的鼠标移动。 以下是与Control类相关的各种鼠标事件 -

  • MouseDown - 按下鼠标按钮时出现

  • MouseEnter - 当鼠标指针进入控件时发生

  • MouseHover - 当鼠标指针悬停在控件上时发生

  • MouseLeave - 当鼠标指针离开控件时发生

  • MouseMove - 当鼠标指针移过控件时发生

  • MouseUp - 当鼠标指针悬停在控件上并释放鼠标按钮时发生

  • MouseWheel - 当鼠标滚轮移动且控件具有焦点时发生

鼠标事件的事件处理程序获得MouseEventArgs类型的参数。 MouseEventArgs对象用于处理鼠标事件。 它具有以下属性 -

  • Buttons - 表示按下鼠标按钮

  • Clicks - 表示点击次数

  • Delta - 表示鼠标滚轮旋转的制动器数量

  • X - 表示鼠标点击的x坐标

  • Y - 表示鼠标点击的y坐标

例子 (Example)

以下是一个示例,其中显示了如何处理鼠标事件。 采取以下步骤 -

  • 在表单中添加三个标签,三个文本框和一个按钮控件。

  • 将标签的文本属性分别更改为 - 客户ID,名称和地址。

  • 将文本框的名称属性分别更改为txtID,txtName和txtAddress。

  • 将按钮的文本属性更改为“提交”。

  • 在代码编辑器窗口中添加以下代码 -

Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "tutorialspont.com"
   End Sub
   Private Sub txtID_MouseEnter(sender As Object, e As EventArgs)_
      Handles txtID.MouseEnter
      'code for handling mouse enter on ID textbox
      txtID.BackColor = Color.CornflowerBlue
      txtID.ForeColor = Color.White
   End Sub
   Private Sub txtID_MouseLeave(sender As Object, e As EventArgs) _
      Handles txtID.MouseLeave
      'code for handling mouse leave on ID textbox
      txtID.BackColor = Color.White
      txtID.ForeColor = Color.Blue
   End Sub
   Private Sub txtName_MouseEnter(sender As Object, e As EventArgs) _
      Handles txtName.MouseEnter
      'code for handling mouse enter on Name textbox
      txtName.BackColor = Color.CornflowerBlue
      txtName.ForeColor = Color.White
   End Sub
   Private Sub txtName_MouseLeave(sender As Object, e As EventArgs) _
      Handles txtName.MouseLeave
      'code for handling mouse leave on Name textbox
      txtName.BackColor = Color.White
      txtName.ForeColor = Color.Blue
   End Sub
   Private Sub txtAddress_MouseEnter(sender As Object, e As EventArgs) _
      Handles txtAddress.MouseEnter
      'code for handling mouse enter on Address textbox
      txtAddress.BackColor = Color.CornflowerBlue
      txtAddress.ForeColor = Color.White
   End Sub
   Private Sub txtAddress_MouseLeave(sender As Object, e As EventArgs) _
      Handles txtAddress.MouseLeave
      'code for handling mouse leave on Address textbox
      txtAddress.BackColor = Color.White
      txtAddress.ForeColor = Color.Blue
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) _
      Handles Button1.Click
      MsgBox("Thank you " & txtName.Text & ", for your kind cooperation")
   End Sub
End Class

当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口 -

事件处理示例1

尝试在文本框中输入文本并检查鼠标事件 -

事件处理结果表

处理键盘事件

以下是与Control类相关的各种键盘事件 -

  • KeyDown - 按下某个键并且控件具有焦点时发生

  • KeyPress - 按下某个键并且控件具有焦点时发生

  • KeyUp - 在控件具有焦点时释放键时发生

KeyDown和KeyUp事件的事件处理程序获取KeyEventArgs类型的参数。 该对象具有以下属性 -

  • Alt - 表示是否按下了ALT键

  • Control - 它指示是否按下CTRL键

  • Handled - 它指示是否处理事件

  • KeyCode - 存储事件的键盘代码

  • KeyData - 存储事件的键盘数据

  • KeyValue - 存储事件的键盘值

  • Modifiers - 它指示按下了哪些修改键(Ctrl,Shift和/或Alt)

  • Shift - 表示是否按下Shift键

KeyDown和KeyUp事件的事件处理程序获取KeyEventArgs类型的参数。 该对象具有以下属性 -

  • Handled - 指示是否处理了KeyPress事件

  • KeyChar - 存储与按下的键对应的字符

例子 (Example)

让我们继续前面的示例来说明如何处理键盘事件。 该代码将验证用户是否输入了他的客户ID和年龄的一些数字。

  • 添加文本属性为“Age”的标签,并添加名为txtAge的相应文本框。

  • 添加以下代码以处理文本框txtID的KeyUP事件。

Private Sub txtID_KeyUP(sender As Object, e As KeyEventArgs) _
   Handles txtID.KeyUp
   If (Not Char.IsNumber(ChrW(e.KeyCode))) Then
      MessageBox.Show("Enter numbers for your Customer ID")
      txtID.Text = " "
   End If
End Sub
  • 添加以下代码以处理文本框txtID的KeyUP事件。

Private Sub txtAge_KeyUP(sender As Object, e As KeyEventArgs) _
   Handles txtAge.KeyUp
   If (Not Char.IsNumber(ChrW(e.keyCode))) Then
      MessageBox.Show("Enter numbers for age")
      txtAge.Text = " "
   End If
End Sub

当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口 -

VB.Net事件示例

如果您将年龄或ID的文本留空或输入一些非数字数据,则会显示一个警告消息框并清除相应的文本 -

VB.Net事件示例

VB.Net - Regular Expressions

regular expression是可以与输入文本匹配的模式。 .Net框架提供了允许这种匹配的正则表达式引擎。 模式由一个或多个字符文字,运算符或构造组成。

用于定义正则表达式的构造

有各种类别的字符,运算符和构造,可用于定义正则表达式。 单击以下链接以查找这些构造。

正则表达式

Regex类用于表示正则表达式。

Regex类有以下常用方法 -

Sr.No. 方法和描述
1

Public Function IsMatch (input As String) As Boolean

指示Regex构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项。

2

Public Function IsMatch (input As String, startat As Integer ) As Boolean

指示在Regex构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的起始位置开始。

3

Public Shared Function IsMatch (input As String, pattern As String ) As Boolean

指示指定的正则表达式是否在指定的输入字符串中找到匹配项。

4

Public Function Matches (input As String) As MatchCollection

在指定的输入字符串中搜索所有正则表达式。

5

Public Function Replace (input As String, replacement As String) As String

在指定的输入字符串中,将所有与正则表达式模式匹配的字符串替换为指定的替换字符串。

6

Public Function Split (input As String) As String()

将输入字符串拆分为由正则表达式构造函数中指定的正则表达式模式定义的位置处的子字符串数组。

有关方法和属性的完整列表,请参阅Microsoft文档。

例子1 (Example 1)

以下示例匹配以'S'开头的单词 -

Imports System.Text.RegularExpressions
Module regexProg
   Sub showMatch(ByVal text As String, ByVal expr As String)
      Console.WriteLine("The Expression: " + expr)
      Dim mc As MatchCollection = Regex.Matches(text, expr)
      Dim m As Match
      For Each m In mc
         Console.WriteLine(m)
      Next m
   End Sub
   Sub Main()
      Dim str As String = "A Thousand Splendid Suns"
      Console.WriteLine("Matching words that start with 'S': ")
      showMatch(str, "\bS\S*")
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Matching words that start with 'S':
The Expression: \bS\S*
Splendid
Suns

例子2 (Example 2)

以下示例匹配以“m”开头并以“e”结尾的单词 -

Imports System.Text.RegularExpressions
Module regexProg
   Sub showMatch(ByVal text As String, ByVal expr As String)
      Console.WriteLine("The Expression: " + expr)
      Dim mc As MatchCollection = Regex.Matches(text, expr)
      Dim m As Match
      For Each m In mc
         Console.WriteLine(m)
      Next m
   End Sub
   Sub Main()
      Dim str As String = "make a maze and manage to measure it"
      Console.WriteLine("Matching words that start with 'm' and ends with 'e': ")
      showMatch(str, "\bm\S*e\b")
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Matching words start with 'm' and ends with 'e':
The Expression: \bm\S*e\b
make
maze
manage
measure

例子3 (Example 3)

此示例替换了额外的空白区域 -

Imports System.Text.RegularExpressions
Module regexProg
   Sub Main()
      Dim input As String = "Hello    World   "
      Dim pattern As String = "\\s+"
      Dim replacement As String = " "
      Dim rgx As Regex = New Regex(pattern)
      Dim result As String = rgx.Replace(input, replacement)
      Console.WriteLine("Original String: {0}", input)
      Console.WriteLine("Replacement String: {0}", result)
      Console.ReadKey()
   End Sub
End Module

编译并执行上述代码时,会产生以下结果 -

Original String: Hello   World   
Replacement String: Hello World   

VB.Net - Database Access

应用程序与数据库通信,首先,检索存储在那里的数据并以用户友好的方式呈现,其次,通过插入,修改和删除数据来更新数据库。

Microsoft ActiveX Data Objects.Net(ADO.Net)是一个模型,是.Net框架的一部分,由.Net应用程序用于检索,访问和更新数据。

ADO.Net对象模型

ADO.Net对象模型只不过是通过各种组件的结构化流程。 对象模型可以用图形描述为 -

ADO.Net对象

驻留在数据存储或数据库中的数据通过data provider检索。 数据提供者的各种组件检索应用程序的数据并更新数据。

应用程序通过数据集或数据读取器访问数据。

  • Datasets将数据存储在断开连接的缓存中,应用程序从中检索数据。

  • Data readers以只读和仅向前模式向应用程序提供数据。

数据提供者

数据提供程序用于连接数据库,执行命令和检索数据,将数据存储在数据集中,读取检索到的数据以及更新数据库。

ADO.Net中的数据提供程序包含以下四个对象 -

Sr.No. 对象和描述
1

Connection

此组件用于设置与数据源的连接。

2

Command

命令是用于检索,插入,删除或修改数据源中的数据的SQL语句或存储过程。

3

DataReader

数据读取器用于以只读和仅向前模式从数据源检索数据。

4

DataAdapter

这对于ADO.Net的工作是不可或缺的,因为数据通过数据适配器传输到数据库或从数据库传输。 它将数据从数据库检索到数据集并更新数据库。 对数据集进行更改时,数据库中的更改实际上由数据适配器完成。

ADO.Net中包含以下不同类型的数据提供程序

  • SQL Server的.Net Framework数据提供程序 - 提供对Microsoft SQL Server的访问。

  • OLE DB的.Net Framework数据提供程序 - 提供对使用OLE DB公开的数据源的访问。

  • ODBC的.Net Framework数据提供程序 - 提供对ODBC公开的数据源的访问。

  • Oracle的.Net Framework数据提供程序 - 提供对Oracle数据源的访问。

  • EntityClient提供程序 - 允许通过实体数据模型(EDM)应用程序访问数据。

DataSet

DataSet是数据的内存表示。 它是从数据库中检索的断开连接的缓存记录集。 与数据库建立连接后,数据适配器会创建数据集并在其中存储数据。 检索数据并将其存储在数据集中后,将关闭与数据库的连接。 这被称为“断开连接的架构”。 数据集用作包含表,行和列的虚拟数据库。

下图显示了数据集对象模型 -

VB.Net数据类

DataSet类存在于System.Data命名空间中。 下表描述了DataSet的所有组件 -

Sr.No. 组件和描述
1

DataTableCollection

它包含从数据源检索的所有表。

2

DataRelationCollection

它包含数据集中表之间的关系和链接。

3

ExtendedProperties

它包含其他信息,例如用于检索数据的SQL语句,检索时间等。

4

DataTable

它表示数据集的DataTableCollection中的表。 它由DataRow和DataColumn对象组成。 DataTable对象区分大小写。

5

DataRelation

它表示数据集的DataRelationshipCollection中的关系。 它用于通过DataColumn对象将两个DataTable对象相互关联。

6

DataRowCollection

它包含DataTable中的所有行。

7

DataView

它代表DataTable的固定自定义视图,用于排序,过滤,搜索,编辑和导航。

8

PrimaryKey

它表示唯一标识DataTable中的行的列。

9

DataRow

它代表DataTable中的一行。 DataRow对象及其属性和方法用于检索,评估,插入,删除和更新DataTable中的值。 NewRow方法用于创建新行,Add方法向表中添加行。

10

DataColumnCollection

它表示DataTable中的所有列。

11

DataColumn

它由构成DataTable的列数组成。

连接到数据库

.Net Framework提供两种类型的Connection类 -

  • SqlConnection - 专为连接Microsoft SQL Server而设计。

  • OleDbConnection - 设计用于连接各种数据库,如Microsoft Access和Oracle。

例子1 (Example 1)

我们在一个名为testDB的数据库中存储了一个名为Customers的Microsoft SQL Server表。 有关在SQL Server中创建数据库和数据库表的信息,请参阅“SQL Server”教程。

让我们连接到这个数据库。 采取以下步骤 -

  • 选择工具→连接到数据库

VB.Net数据库连接示例
  • 在“添加连接”对话框中选择服务器名称和数据库名称。

    中号
VB.Net数据库连接
  • 单击“测试连接”按钮以检查连接是否成功。

连接成功
  • 在表单上添加DataGridView。

VB.Net DataGridView
  • 单击“选择数据源”组合框。

  • 单击“添加项目数据源”链接。

添加项目数据源链接
  • 这将打开数据源配置向导。

  • 选择Database作为数据源类型

数据源
  • 选择DataSet作为数据库模型。

数据库模型
  • 选择已设置的连接。

VB.Net数据库连接
  • 保存连接字符串。

保存连接字符串
  • 在我们的示例中选择数据库对象Customers表,然后单击Finish按钮。

VB.Net数据库连接
  • 选择“预览数据”链接以查看“结果”网格中的数据 -

数据预览

使用Microsoft Visual Studio工具栏上的“ Start按钮运行应用程序时,它将显示以下窗口 -

数据网格视图中的VB.net数据

例子2 (Example 2)

在此示例中,让我们使用代码访问DataGridView控件中的数据。 采取以下步骤 -

  • 在表单中添加DataGridView控件和一个按钮。

  • 将按钮控件的文本更改为“填充”。

  • 双击按钮控件,为按钮的Click事件添加所需的代码,如下所示 -

Imports System.Data.SqlClient
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) _
   Handles MyBase.Load
      'TODO: This line of code loads data into the 'TestDBDataSet.CUSTOMERS' table.   
      You can move, or remove it, as needed.
      Me.CUSTOMERSTableAdapter.Fill(Me.TestDBDataSet.CUSTOMERS)
      ' Set the caption bar text of the form.   
      Me.Text = "iowiki.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim connection As SqlConnection = New sqlconnection()
      connection.ConnectionString = "Data Source=KABIR-DESKTOP; _
         Initial Catalog=testDB;Integrated Security=True"
      connection.Open()
      Dim adp As SqlDataAdapter = New SqlDataAdapter _
      ("select * from Customers", connection)
      Dim ds As DataSet = New DataSet()
      adp.Fill(ds)
      DataGridView1.DataSource = ds.Tables(0)
   End Sub
End Class
  • 当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口 -

数据库连接
  • 单击“填充”按钮将在数据网格视图控件上显示该表 -

数据库连接

创建表,列和行

我们已经讨论过像DataTable,DataColumn和DataRow这样的DataSet组件允许我们分别创建表,列和行。

以下示例演示了该概念 -

例子3 (Example 3)

到目前为止,我们已经使用了计算机中已有的表和数据库。 在此示例中,我们将创建一个表,向其中添加列,行和数据,并使用DataGridView对象显示表。

采取以下步骤 -

  • 在表单中添加DataGridView控件和一个按钮。

  • 将按钮控件的文本更改为“填充”。

  • 在代码编辑器中添加以下代码。

Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "tutorialspont.com"
   End Sub
   Private Function CreateDataSet() As DataSet
      'creating a DataSet object for tables
      Dim dataset As DataSet = New DataSet()
      ' creating the student table
      Dim Students As DataTable = CreateStudentTable()
      dataset.Tables.Add(Students)
      Return dataset
   End Function
   Private Function CreateStudentTable() As DataTable
      Dim Students As DataTable
      Students = New DataTable("Student")
      ' adding columns
      AddNewColumn(Students, "System.Int32", "StudentID")
      AddNewColumn(Students, "System.String", "StudentName")
      AddNewColumn(Students, "System.String", "StudentCity")
      ' adding rows
      AddNewRow(Students, 1, "Zara Ali", "Kolkata")
      AddNewRow(Students, 2, "Shreya Sharma", "Delhi")
      AddNewRow(Students, 3, "Rini Mukherjee", "Hyderabad")
      AddNewRow(Students, 4, "Sunil Dubey", "Bikaner")
      AddNewRow(Students, 5, "Rajat Mishra", "Patna")
      Return Students
   End Function
   Private Sub AddNewColumn(ByRef table As DataTable, _ 
   ByVal columnType As String, ByVal columnName As String)
      Dim column As DataColumn = _ 
         table.Columns.Add(columnName, Type.GetType(columnType))
   End Sub
   'adding data into the table
   Private Sub AddNewRow(ByRef table As DataTable, ByRef id As Integer,_
   ByRef name As String, ByRef city As String)
      Dim newrow As DataRow = table.NewRow()
      newrow("StudentID") = id
      newrow("StudentName") = name
      newrow("StudentCity") = city
      table.Rows.Add(newrow)
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim ds As New DataSet
      ds = CreateDataSet()
      DataGridView1.DataSource = ds.Tables("Student")
   End Sub
End Class
  • 当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口 -

例
  • 单击“填充”按钮将在数据网格视图控件上显示该表 -

例

VB.Net - Excel Sheet

VB.Net支持Microsoft Excel 2010的COM对象模型与您的应用程序之间的互操作性。

要在应用程序中使用此互操作性,您需要在Windows窗体应用程序中导入名称空间Microsoft.Office.Interop.Excel

从VB.Net创建Excel应用程序

让我们首先按照Microsoft Visual Studio中的以下步骤创建一个Window窗体应用程序: File → New Project → Windows Forms Applications

最后,选择确定,Microsoft Visual Studio创建项目并显示以下Form1

在窗体中插入一个Button控件Button1。

将Microsoft Excel对象库的引用添加到项目中。 要做到这一点 -

  • 从项目菜单中选择添加参考。

添加参考
  • 在“COM”选项卡上,找到“Microsoft Excel对象库”,然后单击“选择”。

COM选项卡
  • 单击确定。

双击代码窗口并填充Button1的Click事件,如下所示。

'  Add the following code snippet on top of Form1.vb
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim appXL As Excel.Application
      Dim wbXl As Excel.Workbook
      Dim shXL As Excel.Worksheet
      Dim raXL As Excel.Range
      ' Start Excel and get Application object.
      appXL = CreateObject("Excel.Application")
      appXL.Visible = True
      ' Add a new workbook.
      wbXl = appXL.Workbooks.Add
      shXL = wbXl.ActiveSheet
      ' Add table headers going cell by cell.
      shXL.Cells(1, 1).Value = "First Name"
      shXL.Cells(1, 2).Value = "Last Name"
      shXL.Cells(1, 3).Value = "Full Name"
      shXL.Cells(1, 4).Value = "Specialization"
      ' Format A1:D1 as bold, vertical alignment = center.
      With shXL.Range("A1", "D1")
         .Font.Bold = True
         .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
      End With
      ' Create an array to set multiple values at once.
      Dim students(5, 2) As String
      students(0, 0) = "Zara"
      students(0, 1) = "Ali"
      students(1, 0) = "Nuha"
      students(1, 1) = "Ali"
      students(2, 0) = "Arilia"
      students(2, 1) = "RamKumar"
      students(3, 0) = "Rita"
      students(3, 1) = "Jones"
      students(4, 0) = "Umme"
      students(4, 1) = "Ayman"
      ' Fill A2:B6 with an array of values (First and Last Names).
      shXL.Range("A2", "B6").Value = students
      ' Fill C2:C6 with a relative formula (=A2 & " " & B2).
      raXL = shXL.Range("C2", "C6")
      raXL.Formula = "=A2 & "" "" & B2"
      ' Fill D2:D6 values.
      With shXL
         .Cells(2, 4).Value = "Biology"
         .Cells(3, 4).Value = "Mathmematics"
         .Cells(4, 4).Value = "Physics"
         .Cells(5, 4).Value = "Mathmematics"
         .Cells(6, 4).Value = "Arabic"
      End With
      ' AutoFit columns A:D.
      raXL = shXL.Range("A1", "D1")
      raXL.EntireColumn.AutoFit()
      ' Make sure Excel is visible and give the user control
      ' of Excel's lifetime.
      appXL.Visible = True
      appXL.UserControl = True
      ' Release object references.
      raXL = Nothing
      shXL = Nothing
      wbXl = Nothing
      appXL.Quit()
      appXL = Nothing
      Exit Sub
Err_Handler:
      MsgBox(Err.Description, vbCritical, "Error: " & Err.Number)
   End Sub
End Class

当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口 -

VB.Net Excel示例

单击按钮将显示以下Excel工作表。 系统将要求您保存工作簿。

VB.Net Excel结果表

VB.Net - Send Email

VB.Net允许从您的应用程序发送电子邮件。 System.Net.Mail命名空间包含用于将电子邮件发送到简单邮件传输协议(SMTP)服务器以进行传递的类。

下表列出了一些常用类 -

Sr.No. 类和描述
1

Attachment

表示电子邮件的附件。

2

AttachmentCollection

存储要作为电子邮件的一部分发送的附件。

3

MailAddress

表示电子邮件发件人或收件人的地址。

4

MailAddressCollection

存储与电子邮件关联的电子邮件地址。

5

MailMessage

表示可以使用SmtpClient类发送的电子邮件。

6

SmtpClient

允许应用程序使用简单邮件传输协议(SMTP)发送电子邮件。

7

SmtpException

表示当SmtpClient无法完成Send或SendAsync操作时引发的异常。

SmtpClient类

SmtpClient类允许应用程序使用简单邮件传输协议(SMTP)发送电子邮件。

以下是SmtpClient类的一些常用属性 -

Sr.No. 财产和描述
1

ClientCertificates

指定应使用哪些证书来建立安全套接字层(SSL)连接。

2

Credentials

获取或设置用于对发件人进行身份验证的凭据。

3

EnableSsl

指定SmtpClient是否使用安全套接字层(SSL)来加密连接。

4

Host

获取或设置用于SMTP事务的主机的名称或IP地址。

5

Port

获取或设置用于SMTP事务的端口。

6

Timeout

获取或设置一个值,该值指定同步发送调用超时之前的时间量。

7

UseDefaultCredentials

获取或设置一个布尔值,该值控制是否随请求一起发送DefaultCredentials。

以下是SmtpClient类的一些常用方法 -

Sr.No. 方法和描述
1

Dispose

将QUIT消息发送到SMTP服务器,正常结束TCP连接,并释放当前SmtpClient类实例使用的所有资源。

2

Dispose(Boolean)

向SMTP服务器发送QUIT消息,正常结束TCP连接,释放当前SmtpClient类实例使用的所有资源,并可选择处置受管资源。

3

OnSendCompleted

引发SendCompleted事件。

4

Send(MailMessage)

将指定的邮件发送到SMTP服务器以进行传递。

5

Send(String, String, String, String)

将指定的电子邮件发送到SMTP服务器以进行传递。 使用String对象指定邮件发件人,收件人,主题和邮件正文。

6

SendAsync(MailMessage, Object)

将指定的电子邮件发送到SMTP服务器以进行传递。 此方法不会阻止调用线程,并允许调用者将对象传递给操作完成时调用的方法。

7

SendAsync(String, String, String, String, Object)

将电子邮件发送到SMTP服务器以进行传递。 使用String对象指定邮件发件人,收件人,主题和邮件正文。 此方法不会阻止调用线程,并允许调用者将对象传递给操作完成时调用的方法。

8

SendAsyncCancel

取消异步操作以发送电子邮件。

9

SendMailAsync(MailMessage)

将指定的邮件发送到SMTP服务器以作为异步操作传递。

10

SendMailAsync(String, String, String, String)

将指定的邮件发送到SMTP服务器以作为异步操作传递。 。 使用String对象指定邮件发件人,收件人,主题和邮件正文。

11

ToString

返回表示当前对象的字符串。

以下示例演示如何使用SmtpClient类发送邮件。 在这方面应注意以下几点 -

  • 您必须指定用于发送电子邮件的SMTP主机服务器。 不同主机服务器的HostPort属性将不同。 我们将使用gmail服务器。

  • 如果SMTP服务器需要,您需要提供Credentials以进行身份​​验证。

  • 您还应分别使用MailMessage.FromMailMessage.To属性提供发件人的电子邮件地址以及收件人的电子邮件地址。

  • 您还应使用MailMessage.Body属性指定邮件内容。

例子 (Example)

在这个例子中,让我们创建一个发送电子邮件的简单应用程序。 采取以下步骤 -

  • 在表单中添加三个标签,三个文本框和一个按钮控件。

  • 将标签的文本属性分别更改为“From”,“To:”和“Message:”。

  • 将文本的名称属性分别更改为txtFrom,txtTo和txtMessage。

  • 将按钮控件的text属性更改为“Send”

  • 在代码编辑器中添加以下代码。

Imports System.Net.Mail
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "iowiki.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Try
         Dim Smtp_Server As New SmtpClient
         Dim e_mail As New MailMessage()
         Smtp_Server.UseDefaultCredentials = False
         Smtp_Server.Credentials = New Net.NetworkCredential("username@gmail.com", "password")
         Smtp_Server.Port = 587
         Smtp_Server.EnableSsl = True
         Smtp_Server.Host = "smtp.gmail.com"
         e_mail = New MailMessage()
         e_mail.From = New MailAddress(txtFrom.Text)
         e_mail.To.Add(txtTo.Text)
         e_mail.Subject = "Email Sending"
         e_mail.IsBodyHtml = False
         e_mail.Body = txtMessage.Text
         Smtp_Server.Send(e_mail)
         MsgBox("Mail Sent")
      Catch error_t As Exception
         MsgBox(error_t.ToString)
      End Try
   End Sub
  • 您必须提供您的gmail地址和真实密码才能获得凭据。

  • 当使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码时,它将显示以下窗口,您将使用该窗口发送电子邮件,自己尝试。

从VB.Net发送电子邮件

VB.Net - XML Processing

可扩展标记语言(XML)是一种非常类似于HTML或SGML的标记语言。 这是万维网联盟推荐的,可作为开放标准提供。

.Net Framework中的System.Xml命名空间包含用于处理XML文档的类。 以下是System.Xml命名空间中的一些常用类。

Sr.No. 类和描述
1

XmlAttribute

表示属性。 属性的有效值和默认值在文档类型定义(DTD)或模式中定义。

2

XmlCDataSection

表示CDATA部分。

3

XmlCharacterData

提供几个类使用的文本操作方法。

4

XmlComment

表示XML注释的内容。

5

XmlConvert

对XML名称进行编码和解码,并提供在公共语言运行时类型和XML模式定义语言(XSD)类型之间进行转换的方法。 转换数据类型时,返回的值与语言环境无关。

6

XmlDeclaration

表示XML声明节点。

7

XmlDictionary

实现用于优化Windows Communication Foundation(WCF)的XML读取器/写入器实现的字典。

8

XmlDictionaryReader

Windows Communication Foundation(WCF)从XmlReader派生的抽象类,用于执行序列化和反序列化。

9

XmlDictionaryWriter

表示Windows Communication Foundation(WCF)从XmlWriter派生以进行序列化和反序列化的抽象类。

10

XmlDocument

表示XML文档。

11

XmlDocumentFragment

表示一个对树插入操作很有用的轻量级对象。

12

XmlDocumentType

表示文档类型声明。

13

XmlElement

表示一个元素。

14

XmlEntity

表示实体声明,例如。

15

XmlEntityReference

表示实体引用节点。

16

XmlException

返回有关上一个异常的详细信息。

17

XmlImplementation

定义一组XmlDocument对象的上下文。

18

XmlLinkedNode

获取紧邻此节点之前或之后的节点。

19

XmlNode

表示XML文档中的单个节点。

20

XmlNodeList

表示有序的节点集合。

21

XmlNodeReader

表示一个读者,它在XmlNode中提供对XML数据的快速,非缓存前向访问。

22

XmlNotation

表示符号声明,例如。

23

XmlParserContext

提供XmlReader解析XML片段所需的所有上下文信息。

24

XmlProcessingInstruction

表示处理指令,XML定义该处理指令以将特定于处理器的信息保留在文档的文本中。

25

XmlQualifiedName

表示XML限定名称。

26

XmlReader

表示提供对XML数据的快速,非缓存,仅向前访问的读者。

27

XmlReaderSettings

指定一组要在Create方法创建的XmlReader对象上支持的功能。

28

XmlResolver

解析由统一资源标识符(URI)命名的外部XML资源。

29

XmlSecureResolver

通过包装XmlResolver对象并限制底层XmlResolver可以访问的资源,帮助保护XmlResolver的另一个实现。

30

XmlSignificantWhitespace

表示混合内容节点中的标记或xml:space ='preserve'范围内的空格之间的空白。 这也称为重要的空白区域。

31

XmlText

表示元素或属性的文本内容。

32

XmlTextReader

表示提供对XML数据的快速,非缓存,仅向前访问的读者。

33

XmlTextWriter

表示一个编写器,它提供快速,非缓存,仅向前生成包含XML数据的流或文件的方式,这些数据符合W3C可扩展标记语言(XML)1.0和XML建议中的命名空间。

34

XmlUrlResolver

解析由统一资源标识符(URI)命名的外部XML资源。

35

XmlWhitespace

表示元素内容中的空格。

36

XmlWriter

表示一个编写器,它提供快速,非缓存,仅向前的方法来生成包含XML数据的流或文件。

37

XmlWriterSettings

指定一组要在XmlWriter.Create方法创建的XmlWriter对象上支持的功能。

XML Parser API

XML数据的两个最基本和最广泛使用的API是SAX和DOM接口。

  • Simple API for XML (SAX) - 在这里,您为感兴趣的事件注册回调,然后让解析器继续处理文档。 当文档很大或存在内存限制时,这很有用,它会在从磁盘读取文件时解析文件,并且整个文件永远不会存储在内存中。

  • Document Object Model (DOM) API - 这是万维网联盟建议,其中整个文件被读入内存并以分层(基于树)的形式存储,以表示XML文档的所有功能。

在使用大文件时,SAX显然无法像DOM一样快地处理信息。 另一方面,独占使用DOM可以真正杀死你的资源,特别是如果用在很多小文件上。

SAX是只读的,而DOM允许更改XML文件。 由于这两种不同的API在字面上相互补充,因此没有理由不将它们用于大型项目。

对于我们所有的XML代码示例,让我们使用一个简单的XML文件movies.xml作为输入 -

<?xml version = "1.0"?>
<collection shelf = "New Arrivals">
   <movie title = "Enemy Behind">
      <type>War, Thriller</type>
      <format>DVD</format>
      <year>2003</year>
      <rating>PG</rating>
      <stars>10</stars>
      <description>Talk about a US-Japan war</description>
   </movie>
   <movie title = "Transformers">
      <type>Anime, Science Fiction</type>
      <format>DVD</format>
      <year>1989</year>
      <rating>R</rating>
      <stars>8</stars>
      <description>A schientific fiction</description>
   </movie>
   <movie title = "Trigun">
      <type>Anime, Action</type>
      <format>DVD</format>
      <episodes>4</episodes>
      <rating>PG</rating>
      <stars>10</stars>
      <description>Vash the Stampede!</description>
   </movie>
   <movie title = "Ishtar">
      <type>Comedy</type>
      <format>VHS</format>
      <rating>PG</rating>
      <stars>2</stars>
      <description>Viewable boredom</description>
   </movie>
</collection>

使用SAX API解析XML

在SAX模型中,您使用XmlReaderXmlWriter类来处理XML数据。

XmlReader类用于以快速,仅向前和非高速缓存的方式读取XML数据。 它读取XML文档或流。

例子1 (Example 1)

此示例演示如何从文件movies.xml中读取XML数据。

采取以下步骤 -

  • 将movies.xml文件添加到应用程序的bin\Debug文件夹中。

  • 在Form1.vb文件中导入System.Xml命名空间。

  • 在表单中添加标签并将其文本更改为“Movies Galore”。

  • 添加三个列表框和三个按钮,以显示xml文件中电影的标题,类型和说明。

  • 使用代码编辑器窗口添加以下代码。

Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "iowiki.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      ListBox1().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
         If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then
            ListBox1.Items.Add(xr.GetAttribute(0))
         End If
      Loop
   End Sub
   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      ListBox2().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
         If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then
            ListBox2.Items.Add(xr.ReadElementString)
         Else
            xr.Read()
         End If
      Loop
   End Sub
   Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
      ListBox3().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
         If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then
            ListBox3.Items.Add(xr.ReadElementString)
         Else
            xr.Read()
         End If
      Loop
   End Sub
End Class

使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码。 单击按钮将显示文件中电影的标题,类型和描述。

VB.Net XML处理示例1

XmlWriter类用于将XML数据写入流,文件或TextWriter对象。 它也以前向,非缓存方式工作。

例子2 (Example 2)

让我们通过在运行时添加一些数据来创建XML文件。 采取以下步骤 -

  • 在表单中添加WebBrowser控件和按钮控件。

  • 将按钮的Text属性更改为Show Authors File。

  • 在代码编辑器中添加以下代码。

Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "iowiki.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim xws As XmlWriterSettings = New XmlWriterSettings()
      xws.Indent = True
      xws.NewLineOnAttributes = True
      Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws)
      xw.WriteStartDocument()
      xw.WriteStartElement("Authors")
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "1")
      xw.WriteElementString("fname", "Zara")
      xw.WriteElementString("lname", "Ali")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "2")
      xw.WriteElementString("fname", "Priya")
      xw.WriteElementString("lname", "Sharma")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "3")
      xw.WriteElementString("fname", "Anshuman")
      xw.WriteElementString("lname", "Mohan")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "4")
      xw.WriteElementString("fname", "Bibhuti")
      xw.WriteElementString("lname", "Banerjee")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "5")
      xw.WriteElementString("fname", "Riyan")
      xw.WriteElementString("lname", "Sengupta")
      xw.WriteEndElement()
      xw.WriteEndElement()
      xw.WriteEndDocument()
      xw.Flush()
      xw.Close()
      WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml")
   End Sub
End Class
  • 使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码。 单击“显示作者文件”将在Web浏览器上显示新创建的authors.xml文件。

VB.Net XML处理示例2

使用DOM API解析XML

根据文档对象模型(DOM),XML文档由节点和节点的属性组成。 XmlDocument类用于实现.Net Framework的XML DOM解析器。 它还允许您通过插入,删除或更新文档中的数据来修改现有XML文档。

以下是XmlDocument类的一些常用方法 -

Sr.No. 方法名称和描述
1

AppendChild

将指定节点添加到此节点的子节点列表的末尾。

2

CreateAttribute(String)

使用指定的Name创建XmlAttribute。

3

CreateComment

创建包含指定数据的XmlComment。

4

CreateDefaultAttribute

使用指定的前缀,本地名称和名称空间URI创建默认属性。

5

CreateElement(String)

创建具有指定名称的元素。

6

CreateNode(String, String, String)

使用指定的节点类型,Name和NamespaceURI创建XmlNode。

7

CreateNode(XmlNodeType, String, String)

使用指定的XmlNodeType,Name和NamespaceURI创建XmlNode。

8

CreateNode(XmlNodeType, String, String, String)

使用指定的XmlNodeType,Prefix,Name和NamespaceURI创建XmlNode。

9

CreateProcessingInstruction

使用指定的名称和数据创建XmlProcessingInstruction。

10

CreateSignificantWhitespace

创建XmlSignificantWhitespace节点。

11

CreateTextNode

使用指定的文本创建XmlText。

12

CreateWhitespace

创建一个XmlWhitespace节点。

13

CreateXmlDeclaration

使用指定的值创建XmlDeclaration节点。

14

GetElementById

获取具有指定ID的XmlElement。

15

GetElementsByTagName(String)

返回一个XmlNodeList,其中包含与指定Name匹配的所有后代元素的列表。

16

GetElementsByTagName(String, String)

返回一个XmlNodeList,其中包含与指定的LocalName和NamespaceURI匹配的所有后代元素的列表。

17

InsertAfter

在指定的引用节点之后立即插入指定的节点。

18

InsertBefore

在指定的引用节点之前插入指定的节点。

19

Load(Stream)

从指定的流加载XML文档。

20

Load(String)

从指定的URL加载XML文档。

21

Load(TextReader)

从指定的TextReader加载XML文档。

22

Load(XmlReader)

从指定的XmlReader加载XML文档。

23

LoadXml

从指定的字符串加载XML文档。

24

PrependChild

将指定节点添加到此节点的子节点列表的开头。

25

ReadNode

根据XmlReader中的信息创建XmlNode对象。 阅读器必须位于节点或属性上。

26

RemoveAll

删除当前节点的所有子节点和/或属性。

27

RemoveChild

删除指定的子节点。

28

ReplaceChild

用newChild节点替换子节点oldChild。

29

Save(Stream)

将XML文档保存到指定的流。

30

Save(String)

将XML文档保存到指定的文件。

31

Save(TextWriter)

将XML文档保存到指定的TextWriter。

32

Save(XmlWriter)

将XML文档保存到指定的XmlWriter。

例子3 (Example 3)

在这个例子中,让我们在xml文档authors.xml中插入一些新节点,然后在列表框中显示所有作者的名字。

采取以下步骤 -

  • 将authors.xml文件添加到应用程序的bin/Debug文件夹中(如果您尝试过最后一个示例,它应该在那里)

  • 导入System.Xml命名空间

  • 在窗体中添加一个列表框和一个按钮控件,并将按钮控件的text属性设置为Show Authors。

  • 使用代码编辑器添加以下代码。

Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.   
      Me.Text = "iowiki.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      ListBox1.Items.Clear()
      Dim xd As XmlDocument = New XmlDocument()
      xd.Load("authors.xml")
      Dim newAuthor As XmlElement = xd.CreateElement("author")
      newAuthor.SetAttribute("code", "6")
      Dim fn As XmlElement = xd.CreateElement("fname")
      fn.InnerText = "Bikram"
      newAuthor.AppendChild(fn)
      Dim ln As XmlElement = xd.CreateElement("lname")
      ln.InnerText = "Seth"
      newAuthor.AppendChild(ln)
      xd.DocumentElement.AppendChild(newAuthor)
      Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing)
      tr.Formatting = Formatting.Indented
      xd.WriteContentTo(tr)
      tr.Close()
      Dim nl As XmlNodeList = xd.GetElementsByTagName("fname")
      For Each node As XmlNode In nl
         ListBox1.Items.Add(node.InnerText)
      Next node
   End Sub
End Class
  • 使用Microsoft Visual Studio工具栏上的“ Start按钮执行并运行上述代码。 单击“显示作者”按钮将显示所有作者的名字,包括我们在运行时添加的名称。

VB.Net XML处理示例3

VB.Net - Web Programming

动态Web应用程序由以下两种类型的程序中的一种或两种组成 -

  • Server-side scripting - 这些是在Web服务器上执行的程序,使用服务器端脚本语言(如ASP(Active Server Pages)或JSP(Java Server Pages))编写。

  • Client-side scripting - 这些是在浏览器上执行的程序,使用JavaScript,VBScript等脚本语言编写。

ASP.Net是Microsoft推出的.Net版本,用于通过使用服务器端脚本创建动态网页。 ASP.Net应用程序是使用.Net框架中存在的可扩展和可重用组件或对象编写的编译代码。 这些代码可以使用.Net框架中的整个类层次结构。

ASP.Net应用程序代码可以用以下任何一种语言编写 -

  • Visual Basic .Net

  • C#

  • Jscript

  • J#

在本章中,我们将简要介绍使用VB.Net编写ASP.Net应用程序。 有关详细讨论,请参阅ASP.Net教程。

ASP.Net内置对象

ASP.Net有一些在Web服务器上运行的内置对象。 这些对象具有在应用程序开发中使用的方法,属性和集合。

下表列出了ASP.Net内置对象及其简要说明 -

Sr.No. 对象和描述
1

Application

描述存储与整个Web应用程序相关的信息的对象的方法,属性和集合,包括应用程序生命周期中存在的变量和对象。

您可以使用此对象来存储和检索要在应用程序的所有用户之间共享的信息。 例如,您可以使用Application对象来创建电子商务页面。

2

Request

描述存储与HTTP请求相关的信息的对象的方法,属性和集合。 这包括表单,cookie,服务器变量和证书数据。

您可以使用此对象访问从浏览器到服务器的请求中发送的信息。 例如,您可以使用Request对象访问用户在HTML表单中输入的信息。

3

Response

描述存储与服务器响应相关的信息的对象的方法,属性和集合。 这包括显示内容,操纵标题,设置区域设置和重定向请求。

您使用此对象将信息发送到浏览器。 例如,您使用Response对象将脚本的输出发送到浏览器。

4

Server

描述为各种服务器任务提供方法的对象的方法和属性。 使用这些方法,您可以执行代码,获取错误条件,编码文本字符串,创建供Web页面使用的对象以及映射物理路径。

您可以使用此对象访问服务器上的各种实用程序功能。 例如,您可以使用Server对象为脚本设置超时。

5

Session

描述存储与用户会话相关的信息的对象的方法,属性和集合,包括会话生命周期中存在的变量和对象。

您可以使用此对象来存储和检索有关特定用户会话的信息。 例如,您可以使用Session对象来保存有关用户及其首选项的信息,并跟踪待处理的操作。

ASP.Net编程模型

ASP.Net提供两种类型的编程模型 -

  • Web Forms - 这使您可以创建将应用于用户界面的各个组件的用户界面和应用程序逻辑。

  • WCF Services - 这使您可以远程访问某些服务器端功能。

在本章中,您需要使用免费的Visual Studio Web Developer。 IDE与您用于创建Windows应用程序的IDE几乎相同。

VS Web Developer IDE

Web表单

网页表格包括 -

  • 用户界面

  • 应用逻辑

用户界面由静态HTML或XML元素和ASP.Net服务器控件组成。 创建Web应用程序时,HTML或XML元素和服务器控件存储在扩展名为.aspx的文件中。 该文件也称为页面文件。

应用程序逻辑由应用于页面中用户界面元素的代码组成。 您可以使用任何.Net语言(如VB.Net或C#)编写此代码。 下图显示了“设计”视图中的Web窗体 -

网络表格

例子 (Example)

让我们创建一个带有Web表单的新网站,该表单将显示用户单击按钮时的当前日期和时间。 采取以下步骤 -

  • 选择文件→新建→网站。 出现“新建网站”对话框。

Web表单示例
  • 选择ASP.Net空网站模板。 键入网站的名称,然后选择保存文件的位置。

  • 您需要向站点添加“默认”页面。 右键单击解决方案资源管理器中的网站名称,然后从上下文菜单中选择“添加新项”选项。 将显示“添加新项”对话框 -

Web表单示例
  • 选择“Web窗体”选项并提供默认页面的名称。 我们将其保留为Default.aspx。 单击“添加”按钮。

  • “默认”页面显示在“源”视图中

Web表单示例
  • 通过在源视图中向页面的

    标记添加值,为默认网页设置标题 -
  • 要在网页上添加控件,请转到设计视图。 在表单上添加三个标签,一个文本框和一个按钮。

Web表单示例
  • 双击该按钮并将以下代码添加到按钮的Click事件中 -

Protected Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
   Label2.Visible = True
   Label2.Text = "Welcome to IOWIKI: " + TextBox1.Text
   Label3.Text = "You visited us at: " + DateTime.Now.ToString()
End Sub

当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将在浏览器中打开以下页面 -

Web表单示例

输入您的姓名,然后单击“提交”按钮 -

Web表单示例

网页服务

Web服务是一个Web应用程序,它基本上是一个由其他应用程序可以使用的方法组成的类。 它还遵循ASP.Net网页之类的代码隐藏架构,尽管它没有用户界面。

以前版本的.Net Framework使用了ASP.Net Web Service的概念,它具有.asmx文件扩展名。 但是,从.Net Framework 4.0开始,Windows Communication Foundation(WCF)技术已经发展成为Web Services,.Net Remoting和其他一些相关技术的新继承者。 它将所有这些技术结合在一起。 在下一节中,我们将简要介绍Windows Communication Foundation(WCF)。

如果您使用的是以前版本的.Net Framework,您仍然可以创建传统的Web服务。 有关详细说明,请参阅ASP.Net - Web服务教程。

Windows Communication Foundation

Windows Communication Foundation或WCF提供了用于创建分布式面向服务的应用程序的API,称为WCF服务。

与Web服务一样,WCF服务也支持应用程序之间的通信。 但是,与Web服务不同,此处的通信不仅限于HTTP。 可以将WCF配置为通过HTTP,TCP,IPC和消息队列使用。 另一个支持WCF的优点是,它支持双工通信,而对于Web服务,我们只能实现单工通信。

从初学者的角度来看,编写WCF服务并不像编写Web服务那么完全不同。 为了简单起见,我们将看到如何 -

  • 创建WCF服务

  • 创建服务合同并定义操作

  • 执行合同

  • 测试服务

  • 利用服务

例子 (Example)

为了理解这个概念,让我们创建一个简单的服务,提供股票价格信息。 客户可以根据股票代码查询股票的名称和价格。 为了使这个例子简单,这些值在二维数组中被硬编码。 这项服务将有两种方法 -

  • GetPrice方法 - 它将根据提供的符号返回股票的价格。

  • GetName方法 - 它将根据提供的符号返回股票的名称。

创建WCF服务

采取以下步骤 -

  • 打开VS Express for Web 2012

  • 选择“新建网站”以打开“新建网站”对话框。

  • 从模板列表中选择WCF服务模板 -

创建WCF服务
  • 从Web位置下拉列表中选择文件系统。

  • 提供WCF服务的名称和位置,然后单击“确定”。

  • 创建了一个新的WCF服务。

创建服务合同并定义操作

服务合同定义服务执行的操作。 在WCF服务应用程序中,您将在解决方案资源管理器中的App_Code文件夹中找到自动创建的两个文件

  • IService.vb - 这将有服务合同; 简单来说,它将具有服务的接口,以及服务将提供的方法的定义,您将在服务中实现。

  • Service.vb - 这将实现服务合同。

WCF服务示例
  • 用给定的代码替换IService.vb文件的代码 -

Public Interface IService
   <OperationContract()>
   Function GetPrice(ByVal symbol As String) As Double
   <OperationContract()>
   Function GetName(ByVal symbol As String) As String
End Interface

实施合同

在Service.vb文件中,您将找到一个名为Service的类,它将实现IService接口中定义的服务契约。

用以下代码替换IService.vb的代码 -

' NOTE: You can use the "Rename" command on the context menu to change the class name "Service" in code, svc and config file together.
Public Class Service
   Implements IService
   Public Sub New()
   End Sub
   Dim stocks As String(,) =
   {
      {"RELIND", "Reliance Industries", "1060.15"},
      {"ICICI", "ICICI Bank", "911.55"},
      {"JSW", "JSW Steel", "1201.25"},
      {"WIPRO", "Wipro Limited", "1194.65"},
      {"SATYAM", "Satyam Computers", "91.10"}
   }
   Public Function GetPrice(ByVal symbol As String) As Double _
   Implements IService.GetPrice
      Dim i As Integer
      'it takes the symbol as parameter and returns price
      For i = 0 To i = stocks.GetLength(0) - 1
         If (String.Compare(symbol, stocks(i, 0)) = 0) Then
            Return Convert.ToDouble(stocks(i, 2))
         End If
      Next i
      Return 0
   End Function
   Public Function GetName(ByVal symbol As String) As String _
   Implements IService.GetName
      ' It takes the symbol as parameter and 
      ' returns name of the stock
      Dim i As Integer
      For i = 0 To i = stocks.GetLength(0) - 1
         If (String.Compare(symbol, stocks(i, 0)) = 0) Then
            Return stocks(i, 1)
         End If
      Next i
      Return "Stock Not Found"
   End Function
End Class

测试服务

要运行创建的WCF服务,请从菜单栏中选择Debug→Start Debugging选项。 输出将是 -

WCF服务测试

要测试服务操作,请双击左窗格中树的操作名称。 右侧窗格中将显示一个新选项卡。

在右窗格的“请求”区域中输入参数值,然后单击“调用”按钮。

下图显示了测试GetPrice操作的结果 -

WCF服务测试

下图显示了测试GetName操作的结果 -

WCF服务测试

利用服务

让我们在同一个解决方案中添加一个默认页面,一个ASP.NET Web表单,我们将使用我们刚刚创建的WCF服务。

采取以下步骤 -

  • 右键单击解决方案资源管理器中的解决方案名称,然后将新的Web表单添加到解决方案中。 它将命名为Default.aspx。

  • 在表单上添加两个标签,一个文本框和一个按钮。

WCF服务利用率
  • 我们需要为刚刚创建的WCF服务添加服务引用。 右键单击Solution Explorer中的网站,然后选择Add Service Reference选项。 这将打开“添加服务引用”对话框。

  • 在“地址”文本框中输入服务的URL(位置),然后单击“转到”按钮。 它使用默认名称ServiceReference1创建服务引用。 单击“确定”按钮。

添加服务参考

添加引用为您的项目执行两个作业 -

  • 在web.config文件中创建服务的地址和绑定。

  • 创建代理类以访问服务。

  • 双击表单中的“获取价格”按钮,在其Click事件中输入以下代码段 -

Partial Class _Default
   Inherits System.Web.UI.Page
   Protected Sub Button1_Click(sender As Object, e As EventArgs) _
   Handles Button1.Click
      Dim ser As ServiceReference1.ServiceClient = _ 
      New ServiceReference1.ServiceClient
      Label2.Text = ser.GetPrice(TextBox1.Text).ToString()
   End Sub
End Class
  • 当使用Microsoft Visual Studio工具栏上的“开始”按钮执行并运行上述代码时,将在浏览器中打开以下页面 -

WCF服务利用率
  • 输入一个符号,然后单击“获取价格”按钮以获得硬编码价格 -

WCF服务利用率
↑回到顶部↑
WIKI教程 @2018