本课学习目标
- 理解变量是什么,以及为什么程序需要变量。
- 使用 Dim 声明变量。
- 认识 String、Integer、Long、Double、Decimal、Boolean、Char、Date 与 Object。
- 为变量指定初始值,并理解变量的值可以改变。
- 理解类型推断(Type Inference)的基本概念。
- 理解 TextBox.Text 为什么是 String。
- 使用 CInt、CDbl、CDec 与 CStr 做基本类型转换。
- 认识 Option Strict On 对现代 VB.NET 程序的帮助。
5.1 什么是变量?
变量(Variable)可以想成程序中的“有名称的储存位置”。程序把资料放进去,需要时再读取或修改。
例如:
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 age As Integer = 20
Dim price As Decimal = 49.9D
Dim isMember As Boolean = True
Dim courseName As String = "Visual Basic 2026"
变量名称的建议
- 使用有意义的名称,例如 studentName、totalPrice。
- 不要使用空格,例如不能写 student name。
- 名称不要以数字开头。
- 避免使用 VB.NET 关键字,例如 Class 或 Integer 作为普通变量名。
- 本教程通常采用 camelCase:第一个单词小写,后续单词首字母大写。
5.3 为什么需要数据类型?
不同资料需要不同的储存方式。数字要参与数学运算,文字要进行连接或搜索,Boolean 则只有 True 与 False。数据类型告诉 .NET 应该如何解释一个值。
String文字
姓名、地址、课程名称、说明文字等。
Integer32 位整数
年龄、数量、分数等不需要小数的常用整数。
Long64 位整数
需要比 Integer 更大范围的整数值。
Double浮点数
一般科学计算或可能包含小数的数值。
Decimal高精度十进制数
金额等重视十进制精度的计算常使用 Decimal。
BooleanTrue / False
会员状态、是否启用、是否通过等逻辑值。
Char单一字符
例如一个英文字母、数字字符或符号。
Date日期与时间
出生日期、预约时间、系统日期等。
Object一般对象
可以引用多种类型,但初学阶段不要为了方便而滥用。
5.4 常用数据类型示例
| 数据类型 | 示例声明 | 适合保存 |
|---|---|---|
| String | Dim name As String = "王芳" | 文字 |
| Integer | Dim quantity As Integer = 12 | 常用整数 |
| Long | Dim population As Long = 3500000000 | 大型整数 |
| Double | Dim average As Double = 83.75 | 一般小数 |
| Decimal | Dim price As Decimal = 99.90D | 金额 |
| Boolean | Dim passed As Boolean = True | 真 / 假状态 |
| Char | Dim grade As Char = "A"c | 单一字符 |
| Date | Dim today As Date = Date.Today | 日期与时间 |
5.5 赋值:把值放进变量
等号 = 在赋值语句中表示“把右边的值存入左边的变量”。
Dim studentName As String
studentName = "陈伟"
Dim score As Integer
score = 78
也可以在声明时直接赋值:
Dim studentName As String = "陈伟"
Dim score As Integer = 78
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。
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 初学者非常重要的一点:
例如:
Dim scoreText As String = txtScore.Text
如果要真正进行数值计算,就要把文字转换成数值:
Dim score As Integer = CInt(txtScore.Text)
5.9 常用类型转换
Visual Basic 提供了一组容易使用的转换函数:
转换成 Integer。
转换成 Long。
转换成 Double。
转换成 Decimal。
转换成 Boolean。
转换成 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}"
5.10 Integer、Double 与 Decimal 怎样选择?
| 场景 | 建议类型 | 原因 |
|---|---|---|
| 学生人数、产品数量、年龄 | Integer | 这些值通常不需要小数。 |
| 平均分、测量值、一般科学计算 | Double | 适合一般浮点数计算。 |
| 价格、金额、财务数值 | Decimal | 十进制精度通常更适合金额类资料。 |
| 非常大的整数 | Long | 比 Integer 可表示更大的整数范围。 |
5.11 实作:学生成绩计算器
现在建立一个简单项目,把“变量 + 数据类型 + 类型转换”结合起来。新建 Windows Forms App,项目名称设为 StudentScoreCalculator。
在 Form1 加入下列控件:
| 控件 | Name | Text / 用途 |
|---|---|---|
| TextBox | txtStudentName | 输入学生姓名 |
| TextBox | txtScore1 | 输入测验 1 成绩 |
| TextBox | txtScore2 | 输入测验 2 成绩 |
| TextBox | txtScore3 | 输入测验 3 成绩 |
| Button | btnCalculate | 计算成绩 |
| Label | lblStudent | 显示学生姓名 |
| Label | lblTotal | 显示总分 |
| Label | lblAverage | 显示平均分 |
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
逐行理解变量与类型
txtStudentName.Text 本身就是 String,因此直接存入 studentName。
三个 TextBox 的 Text 都是 String,使用 CInt 转成整数后才能正确相加。
三项整数成绩相加,结果仍适合存入 Integer。
平均值可能有小数,因此使用 Double,并除以 3.0。
{average:F2} 把平均分显示为两位小数,例如 85.33。
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 初学者常见问题
输入 10 + 20 得到奇怪结果
检查你是否直接处理 TextBox.Text。它是 String;数值运算前应转换成适当的数字类型。
CInt 出现运行时错误
输入可能是空白或非整数。第 13 课会学习 TryParse 做安全验证。
金额使用 Double
一般金额计算通常更适合 Decimal。数据类型应根据资料意义选择。
变量在另一个 Sub 找不到
如果变量声明在某个 Sub 内,它通常只在该过程的作用范围内可用。
5.14 小练习:扩展成绩计算器
- 加入 txtStudentId,使用 String 保存学号。
- 加入第四项成绩 txtScore4,重新计算总分与平均分。
- 新增一个 Decimal 变量 courseFee,并在 Label 显示课程费用。
- 新增一个 Boolean 变量 isRegistered,先设为 True,再使用字符串插值显示它。
- 尝试在文件最上方加入 Option Strict On,观察 Visual Studio 是否指出需要更明确转换的代码。
本课复习
- 变量是什么?
- Dim score As Integer = 80 每一部分代表什么?
- String、Integer、Double、Decimal 与 Boolean 分别适合保存什么资料?
- 为什么 txtScore.Text 不能直接当成 Integer?
- CInt、CDbl、CDec 和 CStr 分别做什么?
- 为什么金额通常优先考虑 Decimal?
- Option Strict On 有什么帮助?
- 局部变量的作用范围通常在哪里?