VB Visual Basic 2026 中文教程
第 5 课 · 数据基础

变量、数据类型与类型转换

程序要处理姓名、年龄、成绩、价格、日期以及“是/否”等不同资料。Visual Basic 使用变量来保存这些值,并通过数据类型告诉程序每个值应该如何储存和运算。本课将建立现代 VB.NET 程序最重要的数据基础。

适合:完成第 4 课的初学者建议时间:45–60 分钟实作:学生成绩计算器

本课学习目标

  • 理解变量是什么,以及为什么程序需要变量。
  • 使用 Dim 声明变量。
  • 认识 String、Integer、Long、Double、Decimal、Boolean、Char、Date 与 Object。
  • 为变量指定初始值,并理解变量的值可以改变。
  • 理解类型推断(Type Inference)的基本概念。
  • 理解 TextBox.Text 为什么是 String。
  • 使用 CIntCDblCDecCStr 做基本类型转换。
  • 认识 Option Strict On 对现代 VB.NET 程序的帮助。

5.1 什么是变量?

变量(Variable)可以想成程序中的“有名称的储存位置”。程序把资料放进去,需要时再读取或修改。

声明变量告诉 VB 名称与类型
储存一个值例如 85 或“李明”
读取或修改显示、计算或重新赋值

例如:

Dim studentName As String = "李明"
Dim score As Integer = 85

这里建立了两个变量:

  • studentName 用来保存文字。
  • score 用来保存整数。

变量的值可以改变:

Dim score As Integer = 85
score = 92

执行第二行后,score 原来的 85 被新的 92 取代。

5.2 使用 Dim 声明变量

Visual Basic 最常见的变量声明语法是:

Dim 变量名称 As 数据类型 = 初始值

例如:

Dim age As Integer = 20
Dim price As Decimal = 49.9D
Dim isMember As Boolean = True
Dim courseName As String = "Visual Basic 2026"
Dim 是什么意思? 在现代 Visual Basic 中,你可以把 Dim 简单理解为“声明一个局部变量”。重点不是背它的历史名称,而是知道它会建立一个变量供当前代码使用。

变量名称的建议

  • 使用有意义的名称,例如 studentNametotalPrice
  • 不要使用空格,例如不能写 student name
  • 名称不要以数字开头。
  • 避免使用 VB.NET 关键字,例如 ClassInteger 作为普通变量名。
  • 本教程通常采用 camelCase:第一个单词小写,后续单词首字母大写。

5.3 为什么需要数据类型?

不同资料需要不同的储存方式。数字要参与数学运算,文字要进行连接或搜索,Boolean 则只有 True 与 False。数据类型告诉 .NET 应该如何解释一个值。

String

文字

姓名、地址、课程名称、说明文字等。

Integer

32 位整数

年龄、数量、分数等不需要小数的常用整数。

Long

64 位整数

需要比 Integer 更大范围的整数值。

Double

浮点数

一般科学计算或可能包含小数的数值。

Decimal

高精度十进制数

金额等重视十进制精度的计算常使用 Decimal。

Boolean

True / False

会员状态、是否启用、是否通过等逻辑值。

Char

单一字符

例如一个英文字母、数字字符或符号。

Date

日期与时间

出生日期、预约时间、系统日期等。

Object

一般对象

可以引用多种类型,但初学阶段不要为了方便而滥用。

5.4 常用数据类型示例

数据类型示例声明适合保存
StringDim name As String = "王芳"文字
IntegerDim quantity As Integer = 12常用整数
LongDim population As Long = 3500000000大型整数
DoubleDim average As Double = 83.75一般小数
DecimalDim price As Decimal = 99.90D金额
BooleanDim passed As Boolean = True真 / 假状态
CharDim grade As Char = "A"c单一字符
DateDim today As Date = Date.Today日期与时间
Decimal 字面值的 D 写金额时可以在数字后加 D,例如 19.95D,明确表示这是 Decimal 值。

5.5 赋值:把值放进变量

等号 = 在赋值语句中表示“把右边的值存入左边的变量”。

Dim studentName As String
studentName = "陈伟"

Dim score As Integer
score = 78

也可以在声明时直接赋值:

Dim studentName As String = "陈伟"
Dim score As Integer = 78
不要把赋值理解成纯数学等式 例如 score = score + 5 在程序中是合法的:先计算右边原来的 score + 5,再把结果存回 score。
Dim score As Integer = 80
score = score + 5

' score 现在是 85

5.6 类型推断(Type Inference)

当变量在声明时已经有明确的初始值,VB.NET 可以在适当设置下根据该值推断类型。

Dim studentName = "李明"
Dim score = 85
Dim price = 29.9D
Dim isActive = True

从这些初始值,编译器可以推断出 String、Integer、Decimal 和 Boolean。

初学阶段建议仍经常写出 As 数据类型 例如 Dim score As Integer = 85 更容易让初学者看懂变量意图。等你熟悉类型以后,再根据场景适度使用类型推断。

5.7 Option Strict On

现代 VB.NET 程序建议尽量使用严格类型检查。你可以在 VB 文件最前面写:

Option Strict On

开启后,编译器会要求你更明确地处理可能造成资料损失或类型不安全的转换。这可以让很多问题在编译阶段就被发现,而不是等程序运行后才出错。

例如:

Option Strict On

Dim age As Integer = 25
Dim text As String = CStr(age)
本教程的方向 我们鼓励逐渐养成明确类型与明确转换的习惯。这样大型项目更容易阅读、调试和维护。

5.8 TextBox.Text 为什么需要转换?

这是 Windows Forms 初学者非常重要的一点:

TextBox.Text 的类型是 String 即使用户在文本框中输入 85,程序取得的仍然是文字 "85",不是 Integer 85。

例如:

Dim scoreText As String = txtScore.Text

如果要真正进行数值计算,就要把文字转换成数值:

Dim score As Integer = CInt(txtScore.Text)

5.9 常用类型转换

Visual Basic 提供了一组容易使用的转换函数:

CInt(value)

转换成 Integer。

CLng(value)

转换成 Long。

CDbl(value)

转换成 Double。

CDec(value)

转换成 Decimal。

CBool(value)

转换成 Boolean。

CStr(value)

转换成 String。

String → Integer

Dim age As Integer = CInt(txtAge.Text)

String → Double

Dim temperature As Double = CDbl(txtTemperature.Text)

String → Decimal

Dim price As Decimal = CDec(txtPrice.Text)

数字 → String

Dim score As Integer = 90
lblResult.Text = CStr(score)

在输出文字中也经常使用字符串插值,使代码更容易阅读:

Dim score As Integer = 90
lblResult.Text = $"你的成绩是 {score}"
CInt 并不是安全的用户输入验证 如果用户输入“abc”,CInt("abc") 会造成运行时错误。本课先学习“类型必须转换”的概念;第 13 课会正式使用 TryParse 建立不会轻易崩溃的输入验证。

5.10 Integer、Double 与 Decimal 怎样选择?

场景建议类型原因
学生人数、产品数量、年龄Integer这些值通常不需要小数。
平均分、测量值、一般科学计算Double适合一般浮点数计算。
价格、金额、财务数值Decimal十进制精度通常更适合金额类资料。
非常大的整数Long比 Integer 可表示更大的整数范围。
不是所有数字都应该使用 Double 选择数据类型应反映资料本身的意义。人数用 Integer,金额通常用 Decimal,这会让代码意图更清楚。

5.11 实作:学生成绩计算器

现在建立一个简单项目,把“变量 + 数据类型 + 类型转换”结合起来。新建 Windows Forms App,项目名称设为 StudentScoreCalculator

Student Score Calculator
学生姓名:
李明
测验 1:
78
测验 2:
86
测验 3:
92
操作:
计算成绩
总分:
256
平均分:
85.33

在 Form1 加入下列控件:

控件NameText / 用途
TextBoxtxtStudentName输入学生姓名
TextBoxtxtScore1输入测验 1 成绩
TextBoxtxtScore2输入测验 2 成绩
TextBoxtxtScore3输入测验 3 成绩
ButtonbtnCalculate计算成绩
LabellblStudent显示学生姓名
LabellblTotal显示总分
LabellblAverage显示平均分

btnCalculate_Click 完整代码

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) _
    Handles btnCalculate.Click

    Dim studentName As String = txtStudentName.Text

    Dim score1 As Integer = CInt(txtScore1.Text)
    Dim score2 As Integer = CInt(txtScore2.Text)
    Dim score3 As Integer = CInt(txtScore3.Text)

    Dim total As Integer = score1 + score2 + score3
    Dim average As Double = total / 3.0

    lblStudent.Text = $"学生:{studentName}"
    lblTotal.Text = $"总分:{total}"
    lblAverage.Text = $"平均分:{average:F2}"

End Sub

逐行理解变量与类型

1
姓名使用 String

txtStudentName.Text 本身就是 String,因此直接存入 studentName。

2
成绩转换成 Integer

三个 TextBox 的 Text 都是 String,使用 CInt 转成整数后才能正确相加。

3
总分使用 Integer

三项整数成绩相加,结果仍适合存入 Integer。

4
平均分使用 Double

平均值可能有小数,因此使用 Double,并除以 3.0

5
F2 格式化输出

{average:F2} 把平均分显示为两位小数,例如 85.33。

本项目暂时假设用户输入正确数字 如果 TextBox 是空白或含非数字文字,CInt 会发生错误。这是故意保留的学习边界:第 13 课“输入验证与 TryParse”会把这个项目改成更安全的版本。

5.12 变量的作用范围:先认识局部变量

本课多数变量都声明在事件处理程序内部:

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    Dim total As Integer = 100
End Sub

total 是一个局部变量。它主要在这个 Sub 内有效。离开这个过程后,其他事件处理程序不能直接使用这个局部变量。

为什么先学局部变量? 局部变量的作用范围小、较容易理解,也比较不容易造成意外修改。类级变量、字段与对象状态会在后续课程逐步介绍。

5.13 初学者常见问题

问题 1

输入 10 + 20 得到奇怪结果

检查你是否直接处理 TextBox.Text。它是 String;数值运算前应转换成适当的数字类型。

问题 2

CInt 出现运行时错误

输入可能是空白或非整数。第 13 课会学习 TryParse 做安全验证。

问题 3

金额使用 Double

一般金额计算通常更适合 Decimal。数据类型应根据资料意义选择。

问题 4

变量在另一个 Sub 找不到

如果变量声明在某个 Sub 内,它通常只在该过程的作用范围内可用。

5.14 小练习:扩展成绩计算器

  1. 加入 txtStudentId,使用 String 保存学号。
  2. 加入第四项成绩 txtScore4,重新计算总分与平均分。
  3. 新增一个 Decimal 变量 courseFee,并在 Label 显示课程费用。
  4. 新增一个 Boolean 变量 isRegistered,先设为 True,再使用字符串插值显示它。
  5. 尝试在文件最上方加入 Option Strict On,观察 Visual Studio 是否指出需要更明确转换的代码。

本课复习

  1. 变量是什么?
  2. Dim score As Integer = 80 每一部分代表什么?
  3. String、Integer、Double、Decimal 与 Boolean 分别适合保存什么资料?
  4. 为什么 txtScore.Text 不能直接当成 Integer?
  5. CIntCDblCDecCStr 分别做什么?
  6. 为什么金额通常优先考虑 Decimal?
  7. Option Strict On 有什么帮助?
  8. 局部变量的作用范围通常在哪里?