VB.Net – 快速指南
VB.Net – 快速指南
VB.Net – 概述
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 是由微软的.NET 框架实现的。因此,它可以完全访问 .Net Framework 中的所有库。还可以在 Mono 上运行 VB.NET 程序,Mono 是 .NET 的开源替代品,不仅可以在 Windows 下运行,甚至可以在 Linux 或 Mac OSX 下运行。
以下原因使 VB.Net 成为广泛使用的专业语言 –
-
现代,通用。
-
面向对象。
-
面向组件。
-
简单易学。
-
结构化语言。
-
它产生高效的程序。
-
它可以在各种计算机平台上编译。
-
.Net 框架的一部分。
强大的编程功能VB.Net
VB.Net 拥有众多强大的编程功能,深受全球众多程序员的喜爱。让我们提及其中一些功能 –
-
布尔条件
-
自动垃圾收集
-
标准库
-
程序集版本控制
-
属性和事件
-
代表和活动管理
-
易于使用的泛型
-
索引器
-
条件编译
-
简单的多线程
VB.Net – 环境设置
在本章中,我们将讨论可用于创建 VB.Net 应用程序的工具。
我们已经提到 VB.Net 是 .Net 框架的一部分,用于编写 .Net 应用程序。因此,在讨论运行 VB.Net 程序的可用工具之前,让我们了解 VB.Net 与 .Net 框架的关系。
.Net 框架
.Net 框架是一个革命性的平台,可帮助您编写以下类型的应用程序 –
-
Windows 应用程序
-
网络应用程序
-
网页服务
.Net 框架应用程序是多平台应用程序。该框架的设计方式使其可以从以下任何一种语言中使用:Visual Basic、C#、C++、Jscript 和 COBOL 等。
所有这些语言都可以访问框架并相互通信。
.Net 框架由一个庞大的代码库组成,由客户端语言(如 VB.Net)使用。这些语言使用面向对象的方法。
以下是 .Net 框架的一些组件 –
-
公共语言运行时 (CLR)
-
.Net 框架类库
-
通用语言规范
-
通用类型系统
-
元数据和程序集
-
Windows 窗体
-
ASP.Net 和 ASP.Net AJAX
-
网
-
Windows 工作流基础 (WF)
-
Windows 演示基础
-
Windows 通信基础 (WCF)
-
LINQ
对于每个组件执行的工作,请参阅ASP.Net – Introduction,有关每个组件的详细信息,请参阅 Microsoft 的文档。
用于 VB.Net 的集成开发环境 (IDE)
Microsoft 为 VB.Net 编程提供以下开发工具 –
-
Visual Studio 2010 (VS)
-
Visual Basic 2010 Express (VBE)
-
可视化网络开发人员
最后两个是免费的。使用这些工具,您可以编写从简单的命令行应用程序到更复杂的应用程序的各种 VB.Net 程序。Visual Basic Express 和 Visual Web Developer Express 版是 Visual Studio 的精简版,具有相同的外观和感觉。它们保留了 Visual Studio 的大部分功能。在本教程中,我们使用了 Visual Basic 2010 Express 和 Visual Web Developer(用于 Web 编程章节)。
你可以从这里下载。它会自动安装在您的机器中。请注意,您需要有效的互联网连接才能安装快速版。
在 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 – 程序结构
在我们学习 VB.Net 编程语言的基本构建块之前,让我们先看一个最小的 VB.Net 程序结构,以便我们可以在接下来的章节中将其作为参考。
VB.Net Hello World 示例
VB.Net 程序基本上由以下部分组成 –
-
命名空间声明
-
一个类或模块
-
一项或多项程序
-
变量
-
主要程序
-
语句和表达式
-
评论
让我们看一个简单的代码,它会打印出“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 命名空间。
-
下一行有一个模块声明,模块Module1。VB.Net 是完全面向对象的,因此每个程序都必须包含一个类的模块,该模块包含您的程序使用的数据和过程。
-
类或模块通常包含不止一个过程。过程包含可执行代码,或者换句话说,它们定义了类的行为。程序可以是以下任何一种 –
-
功能
-
子
-
操作员
-
得到
-
放
-
添加处理程序
-
移除处理程序
-
引发事件
-
-
下一行 (‘This program) 将被编译器忽略,并已在程序中添加附加注释。
-
下一行定义了 Main 过程,它是所有 VB.Net 程序的入口点。Main 过程说明模块或类在执行时将执行的操作。
-
Main 过程用语句指定其行为
Console.WriteLine(“Hello World”) WriteLine是System命名空间中定义的Console类的方法。此语句导致消息“Hello, World!” 以显示在屏幕上。
-
最后一行Console.ReadKey()是针对 VS.NET 用户的。当程序从 Visual Studio .NET 启动时,这将防止屏幕快速运行和关闭。
编译执行VB.Net程序
如果您使用的是 Visual Studio.Net IDE,请执行以下步骤 –
-
启动 Visual Studio。
-
在菜单栏上,选择文件 → 新建 → 项目。
-
从模板中选择 Visual Basic
-
选择控制台应用程序。
-
使用“浏览”按钮为您的项目指定名称和位置,然后选择“确定”按钮。
-
新项目出现在解决方案资源管理器中。
-
在代码编辑器中编写代码。
-
单击运行按钮或 F5 键以运行项目。将出现一个命令提示符窗口,其中包含一行 Hello World。
您可以使用命令行而不是 Visual Studio IDE 来编译 VB.Net 程序 –
-
打开文本编辑器并添加上述代码。
-
将文件另存为helloworld.vb
-
打开命令提示符工具并转到保存文件的目录。
-
键入VBC helloworld.vb,然后按回车编译代码。
-
如果您的代码中没有错误,命令提示符会将您带到下一行并生成helloworld.exe可执行文件。
-
接下来,输入helloworld来执行你的程序。
-
您将能够在屏幕上看到“Hello World”。
VB.Net – 基本语法
VB.Net 是一种面向对象的编程语言。在面向对象的编程方法中,程序由通过动作相互交互的各种对象组成。对象可能采取的操作称为方法。相同种类的对象被称为具有相同的类型,或者更常见的是,被称为在同一类中。
当我们考虑 VB.Net 程序时,它可以定义为通过调用彼此的方法进行通信的对象的集合。现在让我们简要地看看类、对象、方法和实例变量的含义。
-
对象– 对象具有状态和行为。例子:一只狗有状态——颜色、名字、品种以及行为——摇摆、吠叫、吃东西等。一个对象是一个类的实例。
-
类– 类可以定义为模板/蓝图,描述其类型的对象支持的行为/状态。
-
方法– 方法基本上是一种行为。一个类可以包含许多方法。在方法中编写逻辑、操作数据并执行所有操作。
-
实例变量– 每个对象都有其独特的实例变量集。对象的状态由分配给这些实例变量的值创建。
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 程序的入口点。在这里,我们使用包含代码和数据的类。您使用类来创建对象。例如,在代码中,r 是一个 Rectangle 对象。
对象是类的实例 –
Dim r As New Rectangle()
一个类可能有可以从外部类访问的成员,如果这样指定的话。数据成员称为字段,过程成员称为方法。
可以在不创建类的对象的情况下调用共享方法或静态方法。实例方法通过类的对象调用 –
Shared Sub Main() Dim r As New Rectangle() r.Acceptdetails() r.Display() Console.ReadLine() End Sub
身份标识
标识符是用于标识类、变量、函数或任何其他用户定义项的名称。在 VB.Net 中命名类的基本规则如下 –
-
名称必须以字母开头,后面可以跟一系列字母、数字 (0 – 9) 或下划线。标识符中的第一个字符不能是数字。
-
它不能包含任何嵌入的空格或符号,如?– +!@#% ^ & * ( ) [ ] { } 。; :” ‘ / 和 \。但是,可以使用下划线 ( _ )。
-
它不应该是保留关键字。
VB.Net 关键词
下表列出了 VB.Net 保留关键字 –
AddHandler | 地址 | 别名 | 和 | 并且 | 作为 | 布尔值 |
ByRef | 字节 | 按值 | 称呼 | 案件 | 抓住 | CBool |
CByte | 字符 | 日期 | 德克 | 光盘 | 字符 | Cint |
Class | CLng | 对象 | 常量 | 继续 | 字节 | 短线 |
CSng | CStr | 类型 | 用户界面 | 培养 | CU短 | 日期 |
Decimal | 宣布 | 默认 | 代表 | 暗淡 | 直接播送 | 做 |
Double | 每个 | 别的 | 否则如果 | 结尾 | 万一 | 枚举 |
Erase | 错误 | 事件 | 出口 | 错误的 | 最后 | 为了 |
Friend | 功能 | 得到 | 获取类型 | 获取 XML 命名空间 | 全球的 | 去 |
Handles | 如果 | 工具 | 进口 | 在 | 继承 | 整数 |
Interface | 是 | 不是 | 让 | 图书馆 | 像 | 长 |
Loop | 我 | 模组 | 模块 | 必须继承 | 必须覆盖 | 我的基地 |
MyClass | 命名空间 | 缩小 | 新的 | 下一个 | 不是 | 没有什么 |
Not Inheritable | 不可覆盖 | 目的 | 的 | 在 | 操作员 | 选项 |
Optional | 要么 | 要不然 | 超载 | 可覆盖 | 覆盖 | 参数数组 |
Partial | 私人的 | 财产 | 受保护 | 民众 | 引发事件 | 只读 |
ReDim | 快速眼动 | 删除处理程序 | 恢复 | 返回 | 字节 | 选择 |
Set | 阴影 | 共享 | 短的 | 单身的 | 静止的 | 步 |
Stop | 细绳 | 结构 | 子 | 同步锁 | 然后 | 扔 |
To | 真的 | 尝试 | 试播 | 类型 | 整数 | 尽管 |
Widening | 和 | WithEvents | 只写 | 异或 |
VB.Net – 数据类型
数据类型是指用于声明不同类型的变量或函数的扩展系统。变量的类型决定了它在存储中占用多少空间以及如何解释存储的位模式。
VB.Net 中可用的数据类型
VB.Net 提供了广泛的数据类型。下表显示了所有可用的数据类型 –
Data Type | 存储分配 | 取值范围 |
---|---|---|
Boolean | 取决于实施平台 | 真或假 |
Byte | 1 字节 | 0 到 255(无符号) |
Char | 2 字节 | 0 到 65535(无符号) |
Date | 8 字节 | 0001 年 1 月 1 日 0:00:00(午夜)至 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 至 2,147,483,647(签名) |
Long | 8 字节 | -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807(已签名) |
Object |
32 位平台上的 4 个字节 64 位平台上的 8 个字节 |
任何类型都可以存储在 Object 类型的变量中 |
SByte | 1 字节 | -128 到 127(签名) |
Short | 2 字节 | -32,768 到 32,767(签名) |
Single | 4字节 |
-3.4028235E+38 到 -1.401298E-45 为负值; 1.401298E-45 到 3.4028235E+38 为正值 |
String | 取决于实施平台 | 0 到大约 20 亿个 Unicode 字符 |
UInteger | 4字节 | 0 到 4,294,967,295(无符号) |
ULong | 8 字节 | 0 到 18,446,744,073,709,551,615(无符号) |
User-Defined | 取决于实施平台 | 结构的每个成员都有一个由其数据类型决定的范围,并且与其他成员的范围无关 |
UShort | 2 字节 | 0 到 65,535(无符号) |
例子
以下示例演示了某些类型的使用 –
Module DataTypes Sub Main() Dim b As Byte Dim n As Integer Dim si As Single Dim d As Double Dim da As Date Dim c As Char Dim s As String Dim bl As Boolean b = 1 n = 1234567 si = 0.12345678901234566 d = 0.12345678901234566 da = Today c = "U"c s = "Me" If ScriptEngine = "VB" Then bl = True Else bl = False End If If bl Then 'the oath taking Console.Write(c & " and," & s & vbCrLf) Console.WriteLine("declaring on the day of: {0}", da) Console.WriteLine("We will learn VB.Net seriously") Console.WriteLine("Lets see what happens to the floating point variables:") Console.WriteLine("The Single: {0}, The Double: {1}", si, d) End If Console.ReadKey() End Sub End Module
当上面的代码被编译和执行时,它会产生以下结果 –
U and, Me declaring on the day of: 12/4/2012 12:00:00 PM We will learn VB.Net seriously Lets see what happens to the floating point variables: The Single:0.1234568, The Double: 0.123456789012346
VB.Net 中的类型转换函数
VB.Net 提供以下内联类型转换功能 –
Sr.No. | 功能和说明 |
---|---|
1 |
CBool(expression) 将表达式转换为布尔数据类型。 |
2 |
CByte(expression) 将表达式转换为字节数据类型。 |
3 |
CChar(expression) 将表达式转换为 Char 数据类型。 |
4 |
CDate(expression) 将表达式转换为日期数据类型 |
5 |
CDbl(expression) 将表达式转换为 Double 数据类型。 |
6 |
CDec(expression) 将表达式转换为十进制数据类型。 |
7 |
CInt(expression) 将表达式转换为整数数据类型。 |
8 |
CLng(expression) 将表达式转换为 Long 数据类型。 |
9 |
CObj(expression) 将表达式转换为对象类型。 |
10 |
CSByte(expression) 将表达式转换为 SByte 数据类型。 |
11 |
CShort(expression) 将表达式转换为 Short 数据类型。 |
12 |
CSng(expression) 将表达式转换为单一数据类型。 |
13 |
CStr(expression) 将表达式转换为字符串数据类型。 |
14 |
CUInt(expression) 将表达式转换为 UInt 数据类型。 |
15 |
CULng(expression) 将表达式转换为 ULng 数据类型。 |
16 |
CUShort(expression) 将表达式转换为 UShort 数据类型。 |
例子
以下示例演示了其中一些功能 –
Module DataTypes Sub Main() Dim n As Integer Dim da As Date Dim bl As Boolean = True n = 1234567 da = Today Console.WriteLine(bl) Console.WriteLine(CSByte(bl)) Console.WriteLine(CStr(bl)) Console.WriteLine(CStr(da)) Console.WriteLine(CChar(CChar(CStr(n)))) Console.WriteLine(CChar(CStr(da))) Console.ReadKey() End Sub End Module
当上面的代码被编译和执行时,它会产生以下结果 –
True -1 True 12/4/2012 1 1
VB.Net – 变量
变量只不过是给我们的程序可以操作的存储区域的名称。VB.Net 中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;可以存储在该内存中的值范围;以及可以应用于变量的一组操作。
我们已经讨论了各种数据类型。VB.Net 中提供的基本值类型可以归类为 –
Type | 例子 |
---|---|
Integral types | SByte、Byte、Short、UShort、Integer、UInteger、Long、ULong 和 Char |
Floating point types | 单双 |
Decimal types | 十进制 |
Boolean types | True 或 False 值,根据分配 |
Date types | 日期 |
VB.Net 还允许定义其他值类型的变量(如Enum )和变量的引用类型(如Class )。我们将在后续章节中讨论日期类型和类。
VB.Net 中的变量声明
在昏暗的语句用于变量声明和存储分配的一个或多个变量。Dim 语句用于模块、类、结构、过程或块级别。
VB.Net 中变量声明的语法是 –
[ < attributelist > ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] Dim [ WithEvents ] variablelist
在哪里,
-
attributelist是应用于变量的属性列表。可选的。
-
accessmodifier定义了变量的访问级别,它的值有 – Public、Protected、Friend、Protected Friend 和 Private。可选的。
-
Shared声明了一个共享变量,它不与类或结构的任何特定实例相关联,而是可用于类或结构的所有实例。可选的。
-
阴影表示该变量在基类中重新声明并隐藏了同名元素或重载元素集。可选的。
-
静态表示该变量将保留其值,即使在声明它的过程终止后也是如此。可选的。
-
ReadOnly表示该变量可以读取,但不能写入。可选的。
-
WithEvents指定该变量用于响应由分配给该变量的实例引发的事件。可选的。
-
Variablelist提供声明的变量列表。
变量列表中的每个变量都具有以下语法和部分 –
variablename[ ( [ boundslist ] ) ] [ As [ New ] datatype ] [ = initializer ]
在哪里,
-
variablename – 是变量的名称
-
边界列表– 可选。它提供数组变量每个维度的边界列表。
-
新– 可选。当 Dim 语句运行时,它会创建该类的一个新实例。
-
数据类型– 如果 Option Strict 为 On,则为必需。它指定变量的数据类型。
-
初始值设定项– 如果未指定 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"
例子
尝试以下使用各种类型变量的示例 –
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 – 作为左值的表达式可能出现在赋值的左侧或右侧。
-
rvalue –右值表达式可能出现在赋值的右侧,但不会出现在左侧。
变量是左值,因此可能出现在赋值的左侧。数字文字是右值,因此可能不会被赋值,也不会出现在左侧。以下是一个有效的声明 –
Dim g As Integer = 20
但以下不是一个有效的语句,会产生编译时错误 –
20 = g
VB.Net – 常量和枚举
所述常量是指固定值,该程序可能无法在其执行期间改变。这些固定值也称为文字。
常量可以是任何基本数据类型,如整数常量、浮点常量、字符常量或字符串文字。还有枚举常量。
除了它们的值在定义后不能修改之外,常量被视为常规变量。
一个枚举是一组命名的整型常量。
声明常量
在 VB.Net 中,常量是使用Const语句声明的。Const 语句用于模块、类、结构、过程或块级别以代替文字值。
Const 语句的语法是 –
[ < attributelist > ] [ accessmodifier ] [ Shadows ] Const constantlist
在哪里,
-
attributelist – 指定应用于常量的属性列表;您可以提供多个以逗号分隔的属性。可选的。
-
accessmodifier – 指定哪些代码可以访问这些常量。可选的。值可以是以下之一:Public、Protected、Friend、Protected Friend 或 Private。
-
Shadows – 这使得常量在基类中隐藏同名的编程元素。可选的。
-
Constantlist – 给出声明的常量名称列表。必需的。
其中,每个常量名称具有以下语法和部分 –
constantname [ As datatype ] = initializer
-
constantname – 指定常量的名称
-
datatype – 指定常量的数据类型
-
初始值设定项 – 指定分配给常量的值
例如,
'The following statements declare constants.' Const maxval As Long = 4999 Public Const message As String = "HELLO" Private Const piValue As Double = 3.1415
例子
以下示例演示了常量值的声明和使用 –
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
在哪里,
-
attributelist – 指应用于变量的属性列表。可选的。
-
accessmodifier – 指定哪些代码可以访问这些枚举。可选的。值可以是以下之一:Public、Protected、Friend 或 Private。
-
Shadows – 这使得枚举在基类中隐藏了相同名称的编程元素。可选的。
-
enumerationname –枚举的名称。必需的
-
datatype – 指定枚举及其所有成员的数据类型。
-
memberlist – 指定在此语句中声明的成员常量列表。必需的。
memberlist 中的每个成员都具有以下语法和部分:
[< attribute list >] member name [ = initializer ]
在哪里,
-
name – 指定成员的名称。必需的。
-
初始值设定项 – 分配给枚举成员的值。可选的。
例如,
Enum Colors red = 1 orange = 2 yellow = 3 green = 4 azure = 5 blue = 6 violet = 7 End Enum
例子
以下示例演示了 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 – 修饰符
修饰符是与任何编程元素一起添加的关键字,以特别强调编程元素在程序中的行为或访问方式。
例如,访问修饰符:Public、Private、Protected、Friend、Protected Friend 等,表示变量、常量、枚举或类等编程元素的访问级别。
VB.Net 中可用的修饰符列表
下表提供了 VB.Net 修饰符的完整列表 –
Sr.No | 修饰符 | 描述 |
---|---|---|
1 | 安西 | 指定 Visual Basic 应将所有字符串编组为美国国家标准协会 (ANSI) 值,而不管所声明的外部过程的名称如何。 |
2 | 集会 | 指定源文件开头的属性应用于整个程序集。 |
3 | 异步 | 指示它修改的方法或 lambda 表达式是异步的。此类方法称为异步方法。异步方法的调用者可以在不等待异步方法完成的情况下恢复其工作。 |
4 | 汽车 | Declare 语句中的charsetmodifier部分在调用外部过程期间提供用于封送处理字符串的字符集信息。它还影响 Visual Basic 如何在外部文件中搜索外部过程名称。Auto 修饰符指定 Visual Basic 应根据 .NET Framework 规则封送字符串。 |
5 | ByRef | 指定参数通过引用传递,即被调用的过程可以更改调用代码中作为参数基础的变量的值。它在以下情况下使用 –
|
6 | 按值 | 指定以被调用的过程或属性不能更改调用代码中参数的变量值的方式传递参数。它在以下情况下使用 –
|
7 | 默认 | 将属性标识为其类、结构或接口的默认属性。 |
8 | 朋友 |
指定一个或多个已声明的编程元素可从包含其声明的程序集中访问,而不仅仅是由声明它们的组件访问。 Friend 访问通常是应用程序编程元素的首选级别,Friend 是接口、模块、类或结构的默认访问级别。 |
9 | 在 | 它用于通用接口和委托。 |
10 | 迭代器 | 指定函数或 Get 访问器是迭代器。迭代器对集合执行自定义迭代。 |
11 | 钥匙 | Key 关键字使您能够为匿名类型的属性指定行为。 |
12 | 模块 | 指定源文件开头的属性适用于当前程序集模块。它与 Module 语句不同。 |
13 | 必须继承 | 指定一个类只能用作基类,不能直接从它创建对象。 |
14 | 必须覆盖 | 指定属性或过程未在此类中实现,必须在派生类中覆盖才能使用。 |
15 | 缩小 | 指示转换运算符 (CType) 将类或结构转换为可能无法保存原始类或结构的某些可能值的类型。 |
16 | 不可继承 | 指定类不能用作基类。 |
17 | 不可覆盖 | 指定不能在派生类中覆盖属性或过程。 |
18 | 可选的 | 指定在调用过程时可以省略过程参数。 |
19 | 出去 | 对于泛型类型参数,Out 关键字指定类型是协变的。 |
20 | 超载 | 指定属性或过程重新声明一个或多个具有相同名称的现有属性或过程。 |
21 | 可覆盖 | 指定属性或过程可以被派生类中的同名属性或过程覆盖。 |
22 | 覆盖 | 指定属性或过程覆盖从基类继承的同名属性或过程。 |
23 | 参数数组 | ParamArray 允许您向过程传递任意数量的参数。ParamArray 参数始终使用 ByVal 声明。 |
24 | 部分的 | 表示类或结构声明是类或结构的部分定义。 |
25 | 私人的 | 指定一个或多个声明的编程元素只能从它们的声明上下文中访问,包括从任何包含的类型中访问。 |
26 | 受保护 | 指定一个或多个声明的编程元素只能从它们自己的类或派生类中访问。 |
27 | 民众 | 指定一个或多个声明的编程元素没有访问限制。 |
28 | 只读 | 指定可以读取但不能写入的变量或属性。 |
29 | 阴影 | 指定已声明的编程元素在基类中重新声明并隐藏同名元素或重载元素集。 |
30 | 共享 | 指定一个或多个声明的编程元素与整个类或结构相关联,而不是与类或结构的特定实例相关联。 |
31 | 静止的 | 指定一个或多个声明的局部变量在声明它们的过程终止后继续存在并保留其最新值。 |
32 | 统一码 | 指定 Visual Basic 应将所有字符串编组为 Unicode 值,而不管所声明的外部过程的名称如何。 |
33 | 加宽 | 指示转换运算符 (CType) 将类或结构转换为可以包含原始类或结构的所有可能值的类型。 |
34 | WithEvents | 指定一个或多个声明的成员变量引用可以引发事件的类的实例。 |
35 | 只写 | 指定可写入但不可读取的属性。 |
VB.Net – 语句
一个说法是在Visual Basic程序的完整指令。它可能包含关键字、运算符、变量、文字值、常量和表达式。
陈述可以归类为 –
-
声明语句– 这些是您命名变量、常量或过程的语句,也可以指定数据类型。
-
可执行语句– 这些是启动操作的语句。这些语句可以调用方法或函数、循环或通过代码块进行分支,或者将值或表达式分配给变量或常量。在最后一种情况下,它被称为赋值语句。
声明声明
声明语句用于命名和定义过程、变量、属性、数组和常量。声明编程元素时,还可以定义其数据类型、访问级别和范围。
您可以声明的编程元素包括变量、常量、枚举、类、结构、模块、接口、过程、过程参数、函数返回、外部过程引用、运算符、属性、事件和委托。
以下是 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 |
可执行语句
一个可执行语句执行一个动作。调用过程、分支到代码中的另一个位置、循环访问多个语句或计算表达式的语句都是可执行语句。赋值语句是可执行语句的特例。
例子
以下示例演示了决策声明 –
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 – 指令
VB.Net 编译器指令向编译器提供指令以在实际编译开始之前对信息进行预处理。所有这些指令都以 # 开头,并且在一行中的指令之前只能出现空白字符。这些指令不是语句。
VB.Net 编译器没有单独的预处理器;然而,指令的处理就像有一个指令一样。在 VB.Net 中,编译器指令用于帮助条件编译。与 C 和 C++ 指令不同,它们不用于创建宏。
VB.Net 中的编译器指令
VB.Net 提供以下一组编译器指令 –
-
#Const 指令
-
#ExternalSource 指令
-
#If…Then…#Else 指令
-
#Region 指令
#Const 指令
该指令定义了条件编译器常量。该指令的语法是 –
#Const constname = expression
在哪里,
-
constname – 指定常量的名称。必需的。
-
表达式– 它可以是文字或其他条件编译器常量,也可以是包括除Is之外的任何或所有算术或逻辑运算符的组合。
例如,
#Const state = "WEST BENGAL"
例子
以下代码演示了该指令的假设用法 –
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 指令的参数是外部文件的路径、第一行的行号和发生错误的行。
例子
以下代码演示了该指令的假设用法 –
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…Then…#Else 指令
该指令有条件地编译所选的 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
例子
以下代码演示了该指令的假设用法 –
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 – 运营商
运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。VB.Net 内置丰富的运算符,并提供以下常用运算符类型 –
-
算术运算符
-
比较运算符
-
逻辑/位运算符
-
位移运算符
-
赋值运算符
-
杂项运算符
本教程将解释最常用的运算符。
算术运算符
下表显示了 VB.Net 支持的所有算术运算符。假设变量A 为2,变量B 为7,然后 –
Operator | 描述 | 例子 |
---|---|---|
^ | 将一个操作数提升到另一个操作数的幂 | B^A 给 49 |
+ | 添加两个操作数 | A + B 给 9 |
– | 从第一个操作数中减去第二个操作数 | A – B 会给 -5 |
* | 将两个操作数相乘 | A * B 将给 14 |
/ | 将一个操作数除以另一个并返回浮点结果 | B/A 会给 3.5 |
\ | 将一个操作数除以另一个并返回整数结果 | B\A会给3 |
MOD | 模运算符和整数除法后的余数 | B MOD A 会给 1 |
比较运算符
下表显示了 VB.Net 支持的所有比较运算符。假设变量A 为10,变量B 为20,然后 –
Operator | 描述 | 例子 |
---|---|---|
= | 检查两个操作数的值是否相等;如果是,则条件变为真。 | (A = B) 是不正确的。 |
<> | 检查两个操作数的值是否相等;如果值不相等,则条件变为真。 | (A <> B) 是真的。 |
> | 检查左操作数的值是否大于右操作数的值;如果是,则条件变为真。 | (A > B) 不正确。 |
< | 检查左操作数的值是否小于右操作数的值;如果是,则条件变为真。 | (A < B) 是真的。 |
>= | 检查左操作数的值是否大于或等于右操作数的值;如果是,则条件变为真。 | (A >= B) 不是真的。 |
<= | 检查左操作数的值是否小于或等于右操作数的值;如果是,则条件变为真。 | (A <= B) 是真的。 |
除了上述之外,VB.Net 还提供了另外三个比较运算符,我们将在接下来的章节中使用它们;但是,我们在此进行简要说明。
-
Is Operator – 它比较两个对象引用变量并确定两个对象引用是否引用同一个对象而不执行值比较。如果 object1 和 object2 都引用完全相同的对象实例,则结果为True;否则,结果为假。
-
IsNot Operator – 它还比较两个对象引用变量并确定两个对象引用是否引用不同的对象。如果 object1 和 object2 都引用完全相同的对象实例,则结果为False;否则,结果为真。
-
Like Operator – 将字符串与模式进行比较。
逻辑/位运算符
下表显示了 VB.Net 支持的所有逻辑运算符。假设变量 A 保存布尔值 True,变量 B 保存布尔值 False,然后 –
Operator | 描述 | 例子 |
---|---|---|
And | 它是逻辑以及按位 AND 运算符。如果两个操作数都为真,则条件为真。此运算符不执行短路,即,它计算两个表达式。 | (A 和 B) 是假的。 |
Or | 它是逻辑以及按位 OR 运算符。如果两个操作数中的任何一个为真,则条件为真。此运算符不执行短路,即,它计算两个表达式。 | (A 或 B) 为真。 |
Not | 它是逻辑以及按位非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将使假。 | Not(A And B) 为真。 |
Xor | 它是逻辑以及按位逻辑异或运算符。如果两个表达式都为 True 或两个表达式都为 False,则返回 True;否则返回 False。此运算符不执行短路,它始终计算两个表达式,并且没有此运算符的短路对应项。 | A Xor B 为真。 |
AndAlso | 它是逻辑与运算符。它仅适用于布尔数据。它执行短路。 | (A AndAlso B) 是假的。 |
OrElse | 它是逻辑 OR 运算符。它仅适用于布尔数据。它执行短路。 | (A OrElse B) 为真。 |
IsFalse | 它确定表达式是否为 False。 | |
IsTrue | 它确定表达式是否为 True。 |
位移运算符
我们已经讨论了按位运算符。移位运算符对二进制值执行移位操作。在进入移位运算符之前,让我们了解位操作。
按位运算符处理位并执行逐位运算。&、| 和 ^ 的真值表如下 –
p | q | p&q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设如果 A = 60; B = 13;现在以二进制格式,它们将如下 –
A = 0011 1100
乙 = 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,然后 –
Operator | 描述 | 例子 |
---|---|---|
And | 如果两个操作数中都存在位,则按位 AND 运算符会将位复制到结果中。 | (A AND B) 将给出 12,即 0000 1100 |
Or | 如果任一操作数中存在二进制 OR 运算符,则复制一点。 | (A 或 B) 将给出 61,即 0011 1101 |
Xor | 二进制 XOR 运算符复制该位,如果它在一个操作数中设置,但不能同时在两个操作数中设置。 | (A Xor B) 将给出 49,即 0011 0001 |
Not | Binary Ones Complement Operator 是一元的,具有“翻转”位的效果。 | (不是 A )将给出 -61,由于带符号的二进制数,它是 2 的补码形式的 1100 0011。 |
<< | 二元左移运算符。左操作数值向左移动右操作数指定的位数。 | A << 2 将给出 240,即 1111 0000 |
>> | 二元右移运算符。左操作数的值向右移动右操作数指定的位数。 | A >> 2 将给出 15,即 0000 1111 |
赋值运算符
VB.Net 支持以下赋值运算符 –
Operator | 描述 | 例子 |
---|---|---|
= | 简单赋值运算符,将右侧操作数的值分配给左侧操作数 | C = A + B 将 A + B 的值赋给 C |
+= | 添加AND赋值运算符,它将右操作数添加到左操作数并将结果分配给左操作数 | C += A 等价于 C = C + A |
-= | 减与赋值运算符,它从左操作数中减去右操作数并将结果分配给左操作数 | C -= A 等价于 C = C – A |
*= | 与赋值运算符相乘,将右操作数与左操作数相乘,并将结果赋给左操作数 | C *= A 等价于 C = C * A |
/= | Divide AND 赋值运算符,它将左操作数与右操作数相除,并将结果分配给左操作数(浮点除法) | C /= A 等价于 C = C / A |
\= | Divide AND 赋值运算符,它将左操作数与右操作数相除,并将结果分配给左操作数(整数除法) | C \= A 等价于 C = C \A |
^= | 求幂和赋值运算符。它将左操作数提高到右操作数的幂,并将结果分配给左操作数。 | C^=A 等价于 C = C ^ A |
<<= | 左移 AND 赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移 AND 赋值运算符 | C >>= 2 与 C = C >> 2 相同 |
&= | 将字符串表达式连接到字符串变量或属性,并将结果分配给变量或属性。 |
Str1 &= Str2 与 Str1 = Str1 & Str2 |
杂项运算符
VB.Net 支持的其他重要运算符很少。
Operator | 描述 | 例子 |
---|---|---|
AddressOf | 返回过程的地址。 |
AddHandler Button1.Click, AddressOf Button1_Click |
Await | 它应用于异步方法或 lambda 表达式中的操作数,以暂停方法的执行,直到等待的任务完成。 |
Dim result As res = Await AsyncMethodThatReturnsResult() Await AsyncMethod() |
GetType | 它返回指定类型的 Type 对象。Type 对象提供有关类型的信息,例如其属性、方法和事件。 |
MsgBox(GetType(Integer).ToString()) |
Function Expression | 它声明了定义函数 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,因为运算符 * 的优先级高于 +,所以它首先乘以 3*2,然后加到 7。
在这里,具有最高优先级的运算符出现在表格的顶部,具有最低优先级的运算符出现在底部。在表达式中,优先级更高的运算符将首先被评估。
Operator | 优先级 |
---|---|
Await | 最高 |
Exponentiation (^) | |
Unary identity and negation (+, -) | |
Multiplication and floating-point division (*, /) | |
Integer division (\) | |
Modulus arithmetic (Mod) | |
Addition and subtraction (+, -) | |
Arithmetic bit shift (<<, >>) | |
All comparison operators (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf…Is) | |
Negation (Not) | |
Conjunction (And, AndAlso) | |
Inclusive disjunction (Or, OrElse) | |
Exclusive disjunction (Xor) | 最低 |
VB.Net – 决策
决策结构要求程序员指定要由程序评估或测试的一个或多个条件,以及如果确定条件为真则要执行的一条或多条语句,以及可选地,如果条件成立则要执行的其他语句确定为假。
以下是在大多数编程语言中发现的典型决策结构的一般形式 –
VB.Net 提供以下类型的决策声明。单击以下链接以查看其详细信息。
Statement | 描述 |
---|---|
一个如果… Then语句包含一个布尔表达式后跟一个或多个语句。 |
|
一个如果… Then语句可以跟着一个可选的Else语句,当布尔表达式是假的,其执行。 |
|
您可以在另一个If或Else if语句中使用一个If或Else if语句。 | |
一个选择事例语句允许一个变量来针对值的列表平等进行测试。 |
|
您可以在另一个select case语句中使用一个select case语句。 |
VB.Net – 循环
可能存在需要多次执行代码块的情况。通常,语句是按顺序执行的:首先执行函数中的第一条语句,然后是第二条,依此类推。
编程语言提供了允许更复杂的执行路径的各种控制结构。
循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式 –
VB.Net 提供以下类型的循环来处理循环需求。单击以下链接以查看其详细信息。
Loop Type | 描述 |
---|---|
当布尔条件为真或直到条件变为真时,它会重复封闭的语句块。它可以随时用 Exit Do 语句终止。 |
|
它将一组语句重复指定的次数,循环索引计算循环执行时的循环迭代次数。 |
|
它为集合中的每个元素重复一组语句。此循环用于访问和操作数组或 VB.Net 集合中的所有元素。 | |
只要给定条件为真,它就会执行一系列语句。 |
|
它不完全是一个循环结构。它执行一系列重复引用单个对象或结构的语句。 |
|
您可以在任何其他 While、For 或 Do 循环中使用一个或多个循环。 |
循环控制语句
循环控制语句改变其正常顺序的执行。当执行离开范围时,在该范围内创建的所有自动对象都将被销毁。
VB.Net 提供了以下控制语句。单击以下链接以查看其详细信息。
Control Statement | 描述 |
---|---|
终止循环或选择 case语句并将执行转移到紧跟在循环或选择 case 之后的语句。 |
|
使循环跳过其主体的其余部分,并在重复之前立即重新测试其条件。 |
|
将控制转移到带标签的语句。虽然不建议在你的程序中使用 GoTo 语句。 |
VB.Net – 字符串
在 VB.Net 中,您可以使用字符串作为字符数组,但是,更常见的做法是使用 String 关键字来声明字符串变量。string 关键字是System.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 Tutorials Point 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 比较两个指定的字符串对象并返回一个整数,指示它们在排序顺序中的相对位置。但是,如果布尔参数为真,它会忽略大小写。 |
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 指示指定的字符串是空字符串还是空字符串。 |
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 类构造函数。
例子
以下示例演示了上面提到的一些方法 –
比较字符串
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.
字符串包含字符串
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.
获取子串:
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.
连接字符串
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 – 日期和时间
您编写的大多数软件都需要实现某种形式的返回当前日期和时间的日期函数。日期是日常生活的重要组成部分,因此无需思考就可以轻松地与它们一起工作。VB.Net 还提供了强大的日期算术工具,使操作日期变得容易。
的日期数据类型包含日期值,时间值或日期和时间值。Date 的默认值是 0001 年 1 月 1 日的 0:00:00(午夜)。等效的 .NET 数据类型是System.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: Both the DateTime structure and the DateAndTime module contain properties like Now and Today, so often beginners find it confusing. The DateAndTime class belongs to the Microsoft.VisualBasic namespace and the DateTime structure belongs to the System namespace. |
DateTime 结构的属性和方法
下表列出了DateTime结构的一些常用属性–
Sr.No | 财产 | 描述 |
---|---|---|
1 | 日期 | 获取此实例的日期组件。 |
2 | 天 | 获取此实例表示的月份中的哪一天。 |
3 | 星期几 | 获取此实例表示的星期几。 |
4 | 一年中的一天 | 获取此实例表示的一年中的哪一天。 |
5 | 小时 | 获取此实例表示的日期的小时部分。 |
6 | 种类 | 获取一个值,该值指示此实例表示的时间是基于本地时间、协调世界时 (UTC) 还是两者都不是。 |
7 | 毫秒 | 获取此实例表示的日期的毫秒部分。 |
8 | 分钟 | 获取此实例表示的日期的分钟部分。 |
9 | 月 | 获取此实例表示的日期的月份部分。 |
10 | 现在 | 获取一个DateTime对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间。 |
11 | 第二 | 获取此实例表示的日期的秒部分。 |
12 | 蜱虫 | 获取表示此实例的日期和时间的刻度数。 |
13 | 时间 | 获取此实例的时间。 |
14 | 今天 | 获取当前日期。 |
15 | UtcNow | 获取一个DateTime对象,该对象设置为此计算机上的当前日期和时间,表示为协调世界时 (UTC)。 |
16 | 年 | 获取此实例表示的日期的年份部分。 |
下表列出了DateTime结构的一些常用方法–
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 结构的隐式默认构造函数。
以下示例演示了这一点 –
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 中获取当前日期和时间 –
当前时间 –
模块日期时间 子主() Console.Write("当前时间:") Console.WriteLine(Now.ToLongTimeString) Console.ReadKey() 结束子 终端模块
当上面的代码被编译和执行时,它会产生以下结果 –
Current Time: 11 :05 :32 AM
当前日期 –
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,文字将无效并导致编译器错误。
要将日期文字转换为您的语言环境格式或自定义格式,请使用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函数的样式参数–
Format | 描述 |
---|---|
General Date, or G | 显示日期和/或时间。例如,1/12/2012 07:07:30 AM。 |
Long Date,Medium Date, or D | 根据当前文化的长日期格式显示日期。例如,2012 年 12 月 16 日,星期日。 |
Short Date, or d | 使用当前文化的短日期格式显示日期。例如,2012 年 12 月 12 日。 |
Long Time,Medium Time, orT | 使用您当前文化的长时间格式显示时间;通常包括小时、分钟、秒。例如,上午 01:07:30。 |
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类的一些常用属性–
Sr.No | 属性和描述 |
---|---|
1 |
Date 根据您的系统返回或设置表示当前日期的字符串值。 |
2 |
Now 根据您的系统返回包含当前日期和时间的日期值。 |
3 |
TimeOfDay 根据您的系统返回或设置包含当前时间的日期值。 |
4 |
Timer 返回一个 Double 值,表示自午夜以来经过的秒数。 |
5 |
TimeString 根据您的系统返回或设置表示当前时间的字符串值。 |
6 |
Today 获取当前日期。 |
下表列出了DateAndTime类的一些常用方法–
Sr.No | 方法名称和描述 |
---|---|
1 |
Public Shared Function DateAdd (Interval As DateInterval, Number As Double, DateValue As DateTime) As DateTime 返回包含添加了指定时间间隔的日期和时间值的日期值。 |
2 |
Public Shared Function DateAdd (Interval As String,Number As Double,DateValue As Object ) As DateTime 返回包含添加了指定时间间隔的日期和时间值的日期值。 |
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 返回一个整数值,其中包含给定日期值的指定组件。 |
5 |
Public Shared Function Day (DateValue As DateTime) As Integer 返回一个从 1 到 31 的整数值,表示一个月中的某一天。 |
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 返回一个包含指定月份名称的字符串值。 |
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 返回一个整数值,其中包含一个表示星期几的数字。 |
13 |
Public Shared Function WeekdayName (Weekday As Integer, Abbreviate As Boolean, FirstDayOfWeekValue As FirstDayOfWeek) As String 返回一个包含指定工作日名称的字符串值。 |
14 |
Public Shared Function Year (DateValue As DateTime) As Integer 返回一个从 1 到 9999 的整数值,表示年份。 |
上面的列表并不详尽。有关 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 – 数组
数组存储相同类型元素的固定大小的顺序集合。数组用于存储数据的集合,但将数组视为相同类型变量的集合通常更有用。
所有数组都由连续的内存位置组成。最低地址对应第一个元素,最高地址对应最后一个元素。
在 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)
在哪里,
-
当您调整现有数组的大小时,Preserve关键字有助于将数据保留在现有数组中。
-
arrayname是要重新维度的数组的名称。
-
下标指定新维度。
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
或者,整数变量的 3 维数组 –
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
锯齿状阵列
锯齿状数组是数组的数组。以下代码显示了声明一个名为score 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类的一些最常用的属性–
Sr.No | 属性名称和描述 |
---|---|
1 |
IsFixedSize 获取一个值,该值指示 Array 是否具有固定大小。 |
2 |
IsReadOnly 获取一个值,该值指示 Array 是否为只读。 |
3 |
Length 获取一个 32 位整数,该整数表示 Array 的所有维度中元素的总数。 |
4 |
LongLength 获取一个 64 位整数,该整数表示 Array 的所有维度中元素的总数。 |
5 |
Rank 获取数组的等级(维数)。 |
Array 类的方法
下表提供了Array类的一些最常用的方法–
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 获取当前实例的类型(继承自 Object)。 |
8 |
Public Function GetUpperBound (dimension As Integer) As Integer 获取 Array 中指定维度的上限。 |
9 |
Public Function GetValue (index As Integer) As Object 获取一维数组中指定位置的值。索引指定为 32 位整数。 |
10 |
Public Shared Function IndexOf (array As Array,value As Object) As Integer 搜索指定的对象并返回整个一维数组中第一次出现的索引。 |
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 文档。
例子
以下程序演示了 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 – 集合
集合类是用于数据存储和检索的专门类。这些类提供对堆栈、队列、列表和哈希表的支持。大多数集合类实现相同的接口。
集合类有多种用途,例如为元素动态分配内存和根据索引访问项目列表等。这些类创建 Object 类的对象集合,Object 类是 VB 中所有数据类型的基类。网。
各种集合类及其用法
以下是System.Collection命名空间的各种常用类。单击以下链接以查看其详细信息。
Class | 描述和用途 |
---|---|
它表示可以单独索引的对象的有序集合。 它基本上是数组的替代品。但是,与数组不同的是,您可以使用索引在列表的指定位置添加和删除项目,并且数组会自动调整自身大小。它还允许动态内存分配、添加、搜索和排序列表中的项目。 |
|
它使用一个键来访问集合中的元素。 当需要使用key来访问元素时使用hash表,可以识别出有用的key值。哈希表中的每个项目都有一个键/值对。该键用于访问集合中的项目。 |
|
它使用键和索引来访问列表中的项目。 排序列表是数组和哈希表的组合。它包含可以使用键或索引访问的项目列表。如果您使用索引访问项目,它是一个 ArrayList,如果您使用一个键访问项目,它是一个 Hashtable。项目集合始终按键值排序。 |
|
它代表一个后进先出的对象集合。 当您需要对项目进行后进先出访问时使用它。当您在列表中添加一个项目时,称为推送该项目,而当您删除它时,称为弹出该项目。 |
|
它表示对象的先进先出集合。 当您需要对项目进行先进先出访问时使用它。当您在列表中添加一个项目时,它被称为enqueue,而当您删除一个项目时,它被称为deque。 |
|
它使用值 1 和 0表示二进制表示的数组。 当您需要存储位但事先不知道位数时使用它。您可以使用从零开始的整数索引访问 BitArray 集合中的项目。 |
VB.Net – 函数
过程是一组在调用时共同执行任务的语句。过程执行后,控制返回到调用过程的语句。VB.Net 有两种类型的程序 –
-
功能
-
子程序或子程序
函数返回一个值,而 Sub 不返回一个值。
定义函数
Function 语句用于声明函数的名称、参数和主体。Function 语句的语法是 –
[Modifiers] Function FunctionName [(ParameterList)] As ReturnType [Statements] End Function
在哪里,
-
修饰符– 指定函数的访问级别;可能的值有:Public、Private、Protected、Friend、Protected Friend 和有关重载、覆盖、共享和隐藏的信息。
-
FunctionName – 表示函数的名称
-
ParameterList – 指定参数列表
-
ReturnType – 指定函数返回的变量的数据类型
例子
下面的代码片段显示了一个函数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 中,函数可以通过两种方式向调用代码返回一个值 –
-
通过使用 return 语句
-
通过将值分配给函数名称
以下示例演示使用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
参数数组
有时,在声明函数或子过程时,您不确定作为参数传递的参数数量。VB.Net 参数数组(或参数数组)在这些时候会派上用场。
以下示例演示了这一点 –
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 过程是不返回任何值的过程。我们在所有示例中都使用了 Sub 过程 Main。到目前为止,我们一直在这些教程中编写控制台应用程序。当这些应用程序启动时,控制转到 Main Sub 过程,它依次运行构成程序主体的任何其他语句。
定义子过程
该子语句用来声明名称,参数和子过程的主体。Sub 语句的语法是 –
[Modifiers] Sub SubName [(ParameterList)] [Statements] End Sub
在哪里,
-
修饰符– 指定程序的访问级别;可能的值有 – Public、Private、Protected、Friend、Protected Friend 和有关重载、覆盖、共享和隐藏的信息。
-
SubName – 表示子的名称
-
ParameterList – 指定参数列表
例子
以下示例演示了一个 Sub 过程CalculatePay,它采用两个参数小时和工资,并显示员工的总工资 –
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 – 类和对象
当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何数据,但它确实定义了类名的含义,即类的对象将包含什么以及可以对这样的对象执行哪些操作。
对象是类的实例。构成类的方法和变量称为类的成员。
类定义
类定义以关键字Class开头,后跟类名;和类主体,以 End Class 语句结束。以下是类定义的一般形式 –
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _ Class name [ ( Of typelist ) ] [ Inherits classname ] [ Implements interfacenames ] [ statements ] End Class
在哪里,
-
attributelist是适用于类的属性列表。可选的。
-
accessmodifier定义了类的访问级别,它具有以下值:Public、Protected、Friend、Protected Friend 和 Private。可选的。
-
阴影表示该变量在基类中重新声明并隐藏了同名元素或重载元素集。可选的。
-
MustInherit指定该类只能用作基类,不能直接从它创建对象,即抽象类。可选的。
-
NotInheritable指定该类不能用作基类。
-
Partial表示类的部分定义。
-
Inherits指定它继承的基类。
-
实现指定类继承自的接口。
以下示例演示了一个 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
构造函数和析构函数
类构造函数是类的特殊成员 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
默认构造函数没有任何参数,但如果需要,构造函数可以有参数。这种构造函数称为参数化构造函数。此技术可帮助您在创建对象时为其分配初始值,如下例所示 –
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
甲析构函数是每当它的类的对象进入的范围之时执行的类的特殊成员子。
一个析构函数的名称为最终确定,它可以既不返回一个值,也不能采取任何参数。析构函数对于在退出程序之前释放资源非常有用,例如关闭文件、释放内存等。
析构函数不能被继承或重载。
以下示例解释了析构函数的概念 –
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
遗产
面向对象编程中最重要的概念之一是继承。继承允许我们根据另一个类来定义一个类,这使得创建和维护应用程序更容易。这也提供了重用代码功能和快速实现时间的机会。
创建类时,程序员可以指定新类应继承现有类的成员,而不是编写全新的数据成员和成员函数。这个现有类称为基类,新类称为派生类。
基类和派生类
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。
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 – 异常处理
异常是在程序执行过程中出现的问题。异常是对程序运行时出现的异常情况的响应,例如试图除以零。
异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。VB.Net 异常处理建立在四个关键字之上 – Try、Catch、Finally和Throw。
-
Try – Try 块标识将激活特定异常的代码块。后面跟着一个或多个 Catch 块。
-
Catch – 程序在程序中要处理问题的位置使用异常处理程序捕获异常。Catch 关键字表示捕获异常。
-
最后– 最后块用于执行一组给定的语句,无论是否抛出异常。例如,如果您打开一个文件,无论是否引发异常,它都必须关闭。
-
Throw – 出现问题时程序抛出异常。这是使用 Throw 关键字完成的。
句法
假设一个块将引发异常,一个方法使用 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
您可以列出多个 catch 语句来捕获不同类型的异常,以防您的 try 块在不同情况下引发多个异常。
.Net Framework 中的异常类
在 .Net Framework 中,异常由类表示。.Net Framework 中的异常类主要是直接或间接派生自System.Exception类。从 System.Exception 类派生的一些异常类是System.ApplicationException和System.SystemException类。
该System.ApplicationException类支持异常,由应用程序产生的。所以程序员定义的异常应该从这个类派生出来。
该System.SystemException类是所有预定义的系统异常的基类。
下表提供了一些从 Sytem.SystemException 类派生的预定义异常类 –
Exception Class | 描述 |
---|---|
System.IO.IOException | 处理 I/O 错误。 |
System.IndexOutOfRangeException | 处理方法引用超出范围的数组索引时生成的错误。 |
System.ArrayTypeMismatchException | 处理类型与数组类型不匹配时生成的错误。 |
System.NullReferenceException | 处理因延迟空对象而产生的错误。 |
System.DivideByZeroException | 处理因除以零而产生的错误。 |
System.InvalidCastException | 处理类型转换期间产生的错误。 |
System.OutOfMemoryException | 处理因可用内存不足而产生的错误。 |
System.StackOverflowException | 处理由堆栈溢出产生的错误。 |
处理异常
VB.Net 以 try 和 catch 块的形式为异常处理问题提供了结构化的解决方案。使用这些块,核心程序语句与错误处理语句分开。
这些错误处理块是使用Try、Catch和finally关键字实现的。以下是发生除以零条件时抛出异常的示例 –
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 – 文件处理
一个文件是存储在一个特定的名称和目录路径的磁盘数据的集合。当一个文件被打开进行读或写时,它就变成了一个流。
流基本上是通过通信路径的字节序列。有两个主要流:输入流和输出流。该输入流用于从文件(读操作)读取数据和所述输出数据流是用于写入到该文件中(写操作)。
VB.Net I/O 类
System.IO 命名空间具有各种类,用于对文件执行各种操作,例如创建和删除文件、读取或写入文件、关闭文件等。
下表显示了 System.IO 命名空间中一些常用的非抽象类 –
I/O Class | 描述 |
---|---|
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)
Parameter | 描述 |
---|---|
FileMode |
该的FileMode枚举定义打开文件的各种方法。FileMode 枚举器的成员是 –
|
FileAccess |
FileAccess枚举器具有成员:Read、ReadWrite和Write。 |
FileShare |
FileShare枚举器具有以下成员 –
|
例子
以下程序演示了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 |
Reading from and Writing into Text files 它涉及读取和写入文本文件。该StreamReader的和的StreamWriter类帮助来完成它。 |
2 |
Reading from and Writing into Binary files 它涉及读取和写入二进制文件。该BinaryReader在和的BinaryWriter类帮助实现这一目标。 |
3 |
Manipulating the Windows file system 它使 VB.Net 程序员能够浏览和定位 Windows 文件和目录。 |
VB.Net – 基本控件
对象是您使用工具箱控件在 Visual Basic 窗体上创建的一种用户界面元素。事实上,在 Visual Basic 中,窗体本身就是一个对象。每个 Visual Basic 控件都包含三个重要元素 –
-
描述对象的属性,
-
方法使对象做某事并且
-
事件是对象做某事时发生的事情。
控件属性
所有 Visual Basic 对象都可以通过设置其属性来移动、调整大小或自定义。属性是 Visual Basic 对象拥有的值或特征,例如 Caption 或 Fore Color。
可以在设计时使用“属性”窗口或在运行时使用程序代码中的语句设置属性。
Object. Property = Value
在哪里
-
Object是您正在自定义的对象的名称。
-
属性是您要更改的特征。
-
值是新的属性设置。
例如,
Form1.Caption = "Hello"
您可以使用属性窗口设置任何表单属性。大多数属性可以在应用程序执行期间设置或读取。您可以参考 Microsoft 文档以获取与应用于它们的不同控件和限制相关联的属性的完整列表。
控制方法
方法是作为类成员创建的过程,它们使对象执行某些操作。方法用于访问或操作对象或变量的特征。您将在课程中使用主要有两类方法 –
-
如果您使用的是诸如工具箱提供的控件之类的控件,则可以调用其任何公共方法。这种方法的要求取决于所使用的类。
-
如果现有方法都不能执行您想要的任务,您可以向类添加一个方法。
例如,MessageBox控件有一个名为Show的方法,它在下面的代码片段中被调用 –
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事件处理程序子例程的默认结构。您可以通过双击代码来查看此代码,该代码将为您提供与表单控件关联的所有事件的完整列表 –
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 |
构成用户界面的所有控件的容器。 |
2 |
它代表一个 Windows 文本框控件。 |
3 |
它代表一个标准的 Windows 标签。 |
4 |
它代表一个 Windows 按钮控件。 |
5 |
它代表一个用于显示项目列表的 Windows 控件。 |
6 |
它代表一个 Windows 组合框控件。 |
7 |
当与其他 RadioButton 控件配对时,它使用户能够从一组选项中选择一个选项。 |
8 |
它代表一个 Windows CheckBox。 |
9 |
它代表一个用于显示图像的 Windows 图片框控件。 |
10 |
它代表一个 Windows 进度条控件。 |
11 |
它实现了滚动条控件的基本功能。 |
12 |
它代表一个 Windows 控件,允许用户选择日期和时间并以指定格式显示日期和时间。 |
13 |
它显示标记项的分层集合,每个项由一个 TreeNode 表示。 |
14 |
它代表一个 Windows 列表视图控件,它显示可以使用四种不同视图之一显示的项目集合。 |
VB.Net – 对话框
有许多内置对话框可在 Windows 窗体中用于各种任务,例如打开和保存文件、打印页面、为应用程序用户提供颜色、字体、页面设置等选项。这些内置对话框减少了开发人员的时间和工作量。
所有这些对话框控件类都继承自CommonDialog类并覆盖基类的RunDialog()函数以创建特定对话框。
当对话框的用户调用其ShowDialog()函数时,会自动调用 RunDialog ()函数。
所述的ShowDialog方法用于显示所有在运行时对话框控件。它返回DialogResult枚举类型的值。DialogResult 枚举的值是 –
-
Abort – 当用户单击 Abort 按钮时,返回 DialogResult.Abort 值。
-
取消– 当用户单击取消按钮时,返回 DialogResult.Cancel。
-
忽略– 当用户单击忽略按钮时,返回 DialogResult.Ignore。
-
No – 返回 DialogResult.No,当用户单击 No 按钮时。
-
None – 不返回任何内容,对话框继续运行。
-
OK – 返回 DialogResult.OK,当用户点击 OK 按钮时
-
重试– 返回 DialogResult.Retry ,当用户单击重试按钮时
-
Yes – 返回 DialogResult.Yes,当用户单击 Yes 按钮时
下图显示了通用对话框类继承 –
上述所有这些类都有相应的控件,可以在设计时从工具箱中添加这些控件。您可以通过以编程方式实例化类或使用相关控件将这些类的相关功能包含到您的应用程序中。
当您双击工具箱中的任何对话框控件或将控件拖到窗体上时,它会出现在 Windows 窗体设计器底部的组件托盘中,它们不会直接显示在窗体上。
下表列出了常用的对话框控件。单击以下链接以检查其详细信息 –
Sr.No. | 控制和描述 |
---|---|
1 |
它代表一个通用对话框,显示可用颜色以及使用户能够定义自定义颜色的控件。 |
2 |
它提示用户从安装在本地计算机上的字体中选择一种字体,并让用户选择字体、字体大小和颜色。 |
3 |
它提示用户打开文件并允许用户选择要打开的文件。 |
4 |
它提示用户选择保存文件的位置,并允许用户指定文件名来保存数据。 |
5 |
它允许用户通过选择打印机并选择从 Windows 窗体应用程序打印文档的哪些部分来打印文档。 |
VB.Net – 高级表格
在本章中,让我们研究以下概念 –
-
在应用程序中添加菜单和子菜单
-
在表单中添加剪切、复制和粘贴功能
-
在表单中锚定和停靠控件
-
模态形式
在应用程序中添加菜单和子菜单
传统上,Menu、MainMenu、ContextMenu和MenuItem类用于在 Windows 应用程序中添加菜单、子菜单和上下文菜单。
现在,MenuStrip、ToolStripMenuItem、ToolStripDropDown和ToolStripDropDownMenu控件替换了以前版本的与菜单相关的控件并为其添加了功能。但是,为了向后兼容和将来使用,旧的控件类被保留。
让我们首先使用旧版本控件创建一个典型的 windows 主菜单栏和子菜单,因为这些控件仍然在旧应用程序中大量使用。
下面是一个例子,它展示了我们如何创建一个带有菜单项的菜单栏:文件、编辑、查看和项目。文件菜单有子菜单新建、打开和保存。
让我们双击 Form 并将以下代码放入打开的窗口中。
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 = "tutorialspoint.com" End Sub End Class
当使用 Microsoft Visual Studio 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
Windows 窗体包含一组丰富的类,用于创建您自己的具有现代外观、外观和感觉的自定义菜单。在MenuStrip中,ToolStripMenuItem,的ContextMenuStrip控件用于高效地创建菜单栏和上下文菜单。
单击以下链接以检查其详细信息 –
Sr.No. | 控制和描述 |
---|---|
1 |
它为表单提供了一个菜单系统。 |
2 |
它表示显示在MenuStrip或ContextMenuStrip上的可选选项。ToolStripMenuItem 控件替换了以前版本的 MenuItem 控件并为其添加了功能。 |
3 |
它代表一个快捷菜单。 |
在表单中添加剪切、复制和粘贴功能
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 = "tutorialspoint.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 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
输入一些文本并检查按钮的工作方式。
在表单中锚定和停靠控件
锚定允许您将控件的锚位置设置为其容器控件的边缘,例如窗体。Control 类的Anchor属性允许您设置此属性的值。Anchor 属性获取或设置控件绑定到的容器的边缘,并确定控件如何与其父控件一起调整大小。
当您将控件锚定到窗体时,在调整窗体大小时,控件会保持与窗体边缘的距离及其锚定位置。
您可以从“属性”窗口设置控件的 Anchor 属性值 –
例如,让我们在窗体上添加一个 Button 控件并将其锚点属性设置为底部、右侧。运行此窗体以查看 Button 控件相对于窗体的原始位置。
现在,当您拉伸窗体时,按钮和窗体右下角之间的距离保持不变。
对接的控制装置其对接至其容器的边缘中的一个的。在对接时,控件完全填充容器的特定区域。
Control 类的Dock属性执行此操作。Dock 属性获取或设置哪些控件边框停靠到其父控件,并确定控件如何与其父控件一起调整大小。
您可以从“属性”窗口设置控件的 Dock 属性值 –
例如,让我们在窗体上添加一个 Button 控件并将其 Dock 属性设置为底部。运行此窗体以查看 Button 控件相对于窗体的原始位置。
现在,当您拉伸表单时,按钮会随着表单调整自身大小。
模态形式
模态表单是那些在您可以继续使用应用程序的其余部分之前需要关闭或隐藏的表单。所有对话框都是模态形式。MessageBox 也是一种模态形式。
您可以通过两种方式调用模态表单 –
-
调用ShowDialog方法
-
调用Show方法
让我们举一个例子,在这个例子中我们将创建一个模态窗体,一个对话框。采取以下步骤 –
-
向您的应用程序添加一个表单 Form1,并向 Form1 添加两个标签和一个按钮控件
-
将第一个标签和按钮的文本属性分别更改为“欢迎使用教程点”和“输入您的姓名”。将第二个标签的文本属性保留为空白。
-
添加一个新的 Windows 窗体 Form2,并向 Form2 添加两个按钮、一个标签和一个文本框。
-
将按钮的文本属性分别更改为 OK 和 Cancel。将标签的文本属性更改为“输入您的姓名:”。
-
将Form2的FormBorderStyle属性设置为FixedDialog,为它提供一个对话框边框。
-
将Form2的ControlBox属性设置为 False。
-
将Form2的ShowInTaskbar属性设置为 False。
-
将OK 按钮的DialogResult属性设置为 OK,将 Cancel 按钮设置为 Cancel。
在 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 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
单击“输入您的姓名”按钮显示第二种形式 –
单击“确定”按钮将控制和信息从模态表单返回到上一个表单 –
VB.Net – 事件处理
事件基本上是用户操作,如按键、点击、鼠标移动等,或某些事件,如系统生成的通知。应用程序需要在事件发生时做出响应。
单击按钮,或在文本框中输入一些文本,或单击菜单项,都是事件的示例。事件是调用函数或可能导致另一个事件的操作。事件处理程序是告诉如何响应事件的函数。
VB.Net 是一种事件驱动语言。主要有两种类型的事件 –
-
鼠标事件
-
键盘事件
处理鼠标事件
鼠标事件随着鼠标在窗体和控件中的移动而发生。以下是与 Control 类相关的各种鼠标事件 –
-
MouseDown – 按下鼠标按钮时发生
-
MouseEnter – 当鼠标指针进入控件时发生
-
MouseHover – 当鼠标指针悬停在控件上时发生
-
MouseLeave – 当鼠标指针离开控件时发生
-
MouseMove – 当鼠标指针移动到控件上时发生
-
MouseUp – 当鼠标指针在控件上并释放鼠标按钮时发生
-
MouseWheel – 当鼠标滚轮移动并且控件具有焦点时发生
鼠标事件的事件处理程序获得一个MouseEventArgs类型的参数。MouseEventArgs 对象用于处理鼠标事件。它具有以下属性 –
-
按钮– 表示按下的鼠标按钮
-
Clicks – 表示点击次数
-
Delta – 表示鼠标滚轮旋转的棘爪数量
-
X – 表示鼠标点击的 x 坐标
-
Y – 表示鼠标点击的 y 坐标
例子
下面是一个示例,显示了如何处理鼠标事件。采取以下步骤 –
-
在表单中添加三个标签、三个文本框和一个按钮控件。
-
将标签的文本属性分别更改为 – Customer ID、Name 和 Address。
-
将文本框的名称属性分别更改为 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 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
尝试在文本框中输入文本并检查鼠标事件 –
处理键盘事件
以下是与 Control 类相关的各种键盘事件 –
-
KeyDown – 当按下一个键并且控件具有焦点时发生
-
KeyPress – 当按下一个键并且控件具有焦点时发生
-
KeyUp – 当控件具有焦点时释放键时发生
KeyDown 和 KeyUp 事件的事件处理程序获得一个KeyEventArgs类型的参数。该对象具有以下属性 –
-
Alt – 表示是否按下了 ALT 键
-
Control – 指示是否按下 CTRL 键
-
已处理– 表示事件是否被处理
-
KeyCode – 存储事件的键盘代码
-
KeyData – 存储事件的键盘数据
-
KeyValue – 存储事件的键盘值
-
修饰符– 它表示按下了哪些修饰键(Ctrl、Shift 和/或 Alt)
-
Shift – 表示是否按下了 Shift 键
KeyDown 和 KeyUp 事件的事件处理程序获得一个KeyEventArgs类型的参数。该对象具有以下属性 –
-
已处理– 指示是否处理 KeyPress 事件
-
KeyChar – 存储与按下的键对应的字符
例子
让我们继续前面的例子来展示如何处理键盘事件。该代码将验证用户是否为其客户 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 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
如果您将年龄或 ID 的文本留空或输入一些非数字数据,它会给出一个警告消息框并清除相应的文本 –
VB.Net – 正则表达式
甲正则表达式是可以针对一个输入文本相匹配的图案。.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() 在 Regex 构造函数中指定的正则表达式模式定义的位置将输入字符串拆分为子字符串数组。 |
有关方法和属性的完整列表,请参阅 Microsoft 文档。
示例 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
以下示例匹配以“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
这个例子替换了额外的空白 –
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 – 数据库访问
应用程序与数据库通信,首先,检索存储在那里的数据并以用户友好的方式呈现,其次,通过插入、修改和删除数据来更新数据库。
Microsoft ActiveX Data Objects.Net (ADO.Net) 是一个模型,是 .Net 框架的一部分,.Net 应用程序使用它来检索、访问和更新数据。
ADO.Net 对象模型
ADO.Net 对象模型只不过是通过各种组件的结构化流程。对象模型可以形象地描述为 –
通过数据提供者检索驻留在数据存储或数据库中的数据。数据提供者的各种组件为应用程序检索数据并更新数据。
应用程序通过数据集或数据读取器访问数据。
-
数据集将数据存储在断开连接的缓存中,应用程序从中检索数据。
-
数据读取器以只读和只进模式向应用程序提供数据。
数据提供者
数据提供者用于连接到数据库、执行命令和检索数据、将其存储在数据集中、读取检索到的数据和更新数据库。
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 类存在于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 它代表数据表中的所有列。 |
11 |
DataColumn 它由构成 DataTable 的列数组成。 |
连接到数据库
.Net 框架提供两种类型的连接类 –
-
SqlConnection – 设计用于连接到 Microsoft SQL Server。
-
OleDbConnection – 设计用于连接各种数据库,如 Microsoft Access 和 Oracle。
示例 1
我们有一个表存储在 Microsoft SQL Server 中,名为 Customers,位于名为 testDB 的数据库中。请参阅“SQL Server”教程以在 SQL Server 中创建数据库和数据库表。
让我们连接到这个数据库。采取以下步骤 –
-
选择工具→连接到数据库
-
在“添加连接”对话框中选择服务器名称和数据库名称。
米
-
单击“测试连接”按钮以检查连接是否成功。
-
在窗体上添加一个 DataGridView。
-
单击选择数据源组合框。
-
单击添加项目数据源链接。
-
这将打开数据源配置向导。
-
选择数据库作为数据源类型
-
选择 DataSet 作为数据库模型。
-
选择已经建立的连接。
-
保存连接字符串。
-
在我们的示例中选择数据库对象 Customers 表,然后单击 Finish 按钮。
-
选择预览数据链接以查看结果网格中的数据 –
当应用程序使用Microsoft Visual Studio 工具栏上可用的开始按钮运行时,它将显示以下窗口 –
示例 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 = "tutorialspoint.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 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
-
单击填充按钮在数据网格视图控件上显示表格 –
创建表、列和行
我们已经讨论过,像 DataTable、DataColumn 和 DataRow 这样的 DataSet 组件允许我们分别创建表、列和行。
以下示例演示了该概念 –
示例 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 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
-
单击填充按钮在数据网格视图控件上显示表格 –
VB.Net – Excel 表格
VB.Net 支持 Microsoft Excel 2010 的 COM 对象模型与您的应用程序之间的互操作性。
要在您的应用程序中利用这种互操作性,您需要在 Windows 窗体应用程序中导入命名空间Microsoft.Office.Interop.Excel。
从 VB.Net 创建 Excel 应用程序
让我们按照 Microsoft Visual Studio 中的以下步骤创建一个 Window Forms 应用程序:文件 → 新建项目 → Windows 窗体应用程序
最后,选择 OK,Microsoft Visual Studio 创建您的项目并显示在 Form1 之后。
在窗体中插入一个 Button 控件 Button1。
向您的项目添加对 Microsoft Excel 对象库的引用。要做到这一点 –
-
从项目菜单中选择添加引用。
-
在 COM 选项卡上,找到 Microsoft Excel 对象库,然后单击选择。
-
单击确定。
双击代码窗口,填充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 工具栏上提供的开始按钮执行并运行上述代码时,它将显示以下窗口 –
单击按钮将显示以下 excel 表。系统将要求您保存工作簿。
VB.Net – 发送电子邮件
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 获取或设置一个值,该值指定同步 Send 调用超时之前的时间量。 |
7 |
UseDefaultCredentials 获取或设置一个布尔值,该值控制是否随请求发送 DefaultCredential。 |
以下是 SmtpClient 类的一些常用方法 –
Sr.No. | 方法和说明 |
---|---|
1 |
Dispose 向 SMTP 服务器发送 QUIT 消息,正常结束 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 主机服务器。该主机和端口的属性将是不同的主机服务器的不同。我们将使用 gmail 服务器。
-
如果 SMTP 服务器需要,您需要提供用于身份验证的凭据。
-
您还应该分别使用MailMessage.From和MailMessage.To属性提供发件人的电子邮件地址和收件人的电子邮件地址。
-
您还应该使用MailMessage.Body属性指定消息内容。
例子
在这个例子中,让我们创建一个简单的应用程序来发送电子邮件。采取以下步骤 –
-
在表单中添加三个标签、三个文本框和一个按钮控件。
-
分别将标签的文本属性更改为 – ‘From’、’To:’ 和 ‘Message:’。
-
将文本的名称属性分别更改为 txtFrom、txtTo 和 txtMessage。
-
将按钮控件的文本属性更改为“发送”
-
在代码编辑器中添加以下代码。
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 = "tutorialspoint.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("[email protected]", "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 工具栏上的“开始”按钮执行并运行上述代码时,它将显示以下窗口,您将使用该窗口发送电子邮件,请自行尝试。
VB.Net – XML 处理
可扩展标记语言 (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 声明节点 <?xml version=’1.0’…?>。 |
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 表示实体声明,例如 <!ENTITY…>。 |
15 |
XmlEntityReference 代表一个实体引用节点。 |
16 |
XmlException 返回有关最后一个异常的详细信息。 |
17 |
XmlImplementation 定义一组 XmlDocument 对象的上下文。 |
18 |
XmlLinkedNode 获取紧接在此节点之前或之后的节点。 |
19 |
XmlNode 表示 XML 文档中的单个节点。 |
20 |
XmlNodeList 表示节点的有序集合。 |
21 |
XmlNodeReader 表示一个读取器,它提供对 XmlNode 中 XML 数据的快速、非缓存前向访问。 |
22 |
XmlNotation 表示符号声明,例如 <!NOTATION… >。 |
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 表示一个编写器,它提供一种快速、非缓存、只进的方式来生成包含符合 W3C 可扩展标记语言 (XML) 1.0 和 XML 中命名空间建议的 XML 数据的流或文件。 |
34 |
XmlUrlResolver 解析由统一资源标识符 (URI) 命名的外部 XML 资源。 |
35 |
XmlWhitespace 表示元素内容中的空白。 |
36 |
XmlWriter 表示提供快速、非缓存、只进的方法来生成包含 XML 数据的流或文件的编写器。 |
37 |
XmlWriterSettings 在由 XmlWriter.Create 方法创建的 XmlWriter 对象上指定要支持的一组功能。 |
XML 解析器 API
XML 数据的两个最基本和最广泛使用的 API 是 SAX 和 DOM 接口。
-
Simple API for XML (SAX) – 在这里,您为感兴趣的事件注册回调,然后让解析器继续处理文档。当您的文档很大或您有内存限制时,这很有用,它会在从磁盘读取文件时解析文件,并且从不将整个文件存储在内存中。
-
文档对象模型 (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 模型中,您使用XmlReader和XmlWriter类来处理 XML 数据。
该的XmlReader类用于在快速读取XML数据,只进和非缓存的方式。它读取 XML 文档或流。
示例 1
此示例演示从文件movies.xml 读取XML 数据。
采取以下步骤 –
-
在应用程序的 bin\Debug 文件夹中添加 movies.xml 文件。
-
在 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 = "tutorialspoint.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 工具栏上的“开始”按钮执行并运行上述代码。单击按钮将显示文件中电影的标题、类型和描述。
所述的XmlWriter类用于写入XML数据到一个流,一个文件或一个TextWriter对象。它也以只进、非缓存的方式工作。
示例 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 = "tutorialspoint.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 工具栏上的“开始”按钮执行并运行上述代码。单击“显示作者文件”将在 Web 浏览器上显示新创建的 author.xml 文件。
使用 DOM API 解析 XML
根据文档对象模型(DOM),XML 文档由节点和节点的属性组成。该的XmlDocument类用于实现.NET Framework的XML DOM解析器。它还允许您通过插入、删除或更新文档中的数据来修改现有的 XML 文档。
以下是XmlDocument类的一些常用方法–
Sr.No. | 方法名称和描述 |
---|---|
1 |
AppendChild 将指定节点添加到此节点的子节点列表的末尾。 |
2 |
CreateAttribute(String) 创建具有指定名称的 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 将子节点 oldChild 替换为 newChild 节点。 |
29 |
Save(Stream) 将 XML 文档保存到指定的流。 |
30 |
Save(String) 将 XML 文档保存到指定的文件。 |
31 |
Save(TextWriter) 将 XML 文档保存到指定的 TextWriter。 |
32 |
Save(XmlWriter) 将 XML 文档保存到指定的 XmlWriter。 |
示例 3
在本例中,让我们在 xml 文档authors.xml 中插入一些新节点,然后在列表框中显示所有作者的名字。
采取以下步骤 –
-
在应用程序的 bin/Debug 文件夹中添加authors.xml 文件(如果您尝试过最后一个示例,它应该在那里)
-
导入 System.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 = "tutorialspoint.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 工具栏上的“开始”按钮执行并运行上述代码。单击“显示作者”按钮将显示所有作者的名字,包括我们在运行时添加的作者。
VB.Net – 网络编程
动态 Web 应用程序由以下两种类型的程序中的一种或两种组成 –
-
服务器端脚本– 这些是在 Web 服务器上执行的程序,使用服务器端脚本语言编写,如 ASP(Active Server Pages)或 JSP(Java Server Pages)。
-
客户端脚本– 这些是在浏览器上执行的程序,使用 JavaScript、VBScript 等脚本语言编写。
ASP.Net 是 ASP 的 .Net 版本,由 Microsoft 推出,用于使用服务器端脚本创建动态网页。ASP.Net 应用程序是使用 .Net 框架中存在的可扩展和可重用组件或对象编写的编译代码。这些代码可以使用 .Net 框架中的整个类层次结构。
ASP.Net 应用程序代码可以用以下任一语言编写 –
-
Visual Basic .Net
-
C#
-
脚本
-
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 服务– 这使您能够远程访问某些服务器端功能。
对于本章,您需要使用免费的 Visual Studio Web Developer。IDE 几乎与您已经用于创建 Windows 应用程序的相同。
网页表格
网络表单包括 –
-
用户界面
-
应用逻辑
用户界面由静态 HTML 或 XML 元素和 ASP.Net 服务器控件组成。创建 Web 应用程序时,HTML 或 XML 元素和服务器控件存储在扩展名为.aspx的文件中。该文件也称为页面文件。
应用程序逻辑由应用于页面中用户界面元素的代码组成。您可以使用任何 .Net 语言(如 VB.Net 或 C#)编写此代码。下图显示了设计视图中的 Web 表单 –
例子
让我们创建一个带有 Web 表单的新网站,当用户单击按钮时,它将显示当前日期和时间。采取以下步骤 –
-
选择文件 → 新建 → 网站。出现“新建网站”对话框。
-
选择 ASP.Net 空网站模板。键入网站名称并选择保存文件的位置。
-
您需要向站点添加一个默认页面。在解决方案资源管理器中右键单击网站名称,然后从上下文菜单中选择添加新项目选项。显示添加新项目对话框 –
-
选择 Web Form 选项并提供默认页面的名称。我们将其保留为 Default.aspx。单击添加按钮。
-
默认页面显示在源视图中
-
通过在源视图中向页面的 <Title> 标签添加值来设置默认网页的标题 –
-
要在网页上添加控件,请转到设计视图。在表单上添加三个标签、一个文本框和一个按钮。
-
双击按钮并将以下代码添加到按钮的 Click 事件中 –
Protected Sub Button1_Click(sender As Object, e As EventArgs) _ Handles Button1.Click Label2.Visible = True Label2.Text = "Welcome to Tutorials Point: " + TextBox1.Text Label3.Text = "You visited us at: " + DateTime.Now.ToString() End Sub
当使用 Microsoft Visual Studio 工具栏上的“开始”按钮执行并运行上述代码时,浏览器中将打开以下页面 –
输入您的姓名并点击提交按钮 –
网页服务
Web 服务是一个 Web 应用程序,它基本上是一个由其他应用程序可以使用的方法组成的类。它还遵循类似于 ASP.Net 网页的代码隐藏体系结构,尽管它没有用户界面。
以前版本的 .Net Framework 使用了 ASP.Net Web 服务的这个概念,它具有 .asmx 文件扩展名。但是,从 .Net Framework 4.0 开始,Windows Communication Foundation (WCF) 技术已经发展成为 Web 服务、.Net Remoting 和其他一些相关技术的新继承者。而是将所有这些技术结合在一起。在下一节中,我们将简要介绍 Windows Communication Foundation (WCF)。
如果您使用的是以前版本的 .Net Framework,您仍然可以创建传统的 Web 服务。详细说明请参考ASP.Net – Web 服务教程。
Windows 通信基础
Windows Communication Foundation 或 WCF 提供用于创建分布式面向服务的应用程序的 API,称为 WCF 服务。
与 Web 服务一样,WCF 服务也支持应用程序之间的通信。但是,与 Web 服务不同的是,这里的通信不仅限于 HTTP。WCF 可以配置为通过 HTTP、TCP、IPC 和消息队列使用。支持 WCF 的另一个优点是,它支持双工通信,而使用 Web 服务我们只能实现单工通信。
从初学者的角度来看,编写 WCF 服务与编写 Web 服务并没有太大区别。为了简单起见,我们将看到如何 –
-
创建 WCF 服务
-
创建服务合同并定义操作
-
履行合同
-
测试服务
-
使用服务
例子
为了理解这个概念,让我们创建一个提供股票价格信息的简单服务。客户可以根据股票代码查询股票的名称和价格。为了让这个例子简单,这些值被硬编码在一个二维数组中。此服务将有两种方法 –
-
GetPrice 方法 – 它将根据提供的符号返回股票的价格。
-
GetName 方法 – 它将根据提供的符号返回股票名称。
创建 WCF 服务
采取以下步骤 –
-
打开 VS Express for Web 2012
-
选择新建网站以打开新建网站对话框。
-
从模板列表中选择 WCF 服务模板 –
-
从 Web 位置下拉列表中选择文件系统。
-
为 WCF 服务提供名称和位置,然后单击“确定”。
-
创建了一个新的 WCF 服务。
创建服务合同并定义操作
服务契约定义了服务执行的操作。在 WCF 服务应用程序中,您会发现在解决方案资源管理器的 App_Code 文件夹中自动创建了两个文件
-
IService.vb – 这将有服务合同;简而言之,它将具有服务的接口,以及服务将提供的方法的定义,您将在您的服务中实现这些定义。
-
Service.vb – 这将实现服务合同。
-
用给定的代码替换 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 服务,请从菜单栏中选择调试 → 启动调试选项。输出将是 –
要测试服务操作,请从左侧窗格的树中双击操作名称。右侧窗格中将出现一个新选项卡。
在右侧窗格的“请求”区域中输入参数值,然后单击“调用”按钮。
下图显示了测试GetPrice操作的结果–
下图显示了测试GetName操作的结果–
使用服务
让我们在相同的解决方案中添加一个默认页面,一个 ASP.NET Web 表单,我们将从中使用我们刚刚创建的 WCF 服务。
采取以下步骤 –
-
在解决方案资源管理器中右键单击解决方案名称,然后向解决方案添加一个新的 Web 表单。它将被命名为 Default.aspx。
-
在表单上添加两个标签、一个文本框和一个按钮。
-
我们需要向我们刚刚创建的 WCF 服务添加一个服务引用。右键单击解决方案资源管理器中的网站,然后选择添加服务引用选项。这将打开“添加服务引用”对话框。
-
在地址文本框中输入服务的 URL(位置),然后单击转到按钮。它创建一个默认名称为ServiceReference1的服务引用。单击确定按钮。
添加参考为您的项目做了两项工作 –
-
在 web.config 文件中为服务创建地址和绑定。
-
创建一个代理类来访问服务。
-
双击表单中的 Get Price 按钮,在其 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 工具栏上的“开始”按钮执行并运行上述代码时,浏览器中将打开以下页面 –
-
输入一个符号并单击“获取价格”按钮以获取硬编码价格 –