Lập trình · Ngôn ngữ lập trình
Hướng dẫn Visual Basic .NET cho người mới bắt đầu
Trả lời nhanh
Visual Basic .NET (VB.NET) là ngôn ngữ hướng đối tượng, kiểu tĩnh, dành cho nền tảng .NET, với từ khóa giống tiếng Anh như Dim, If ... Then ... End If và For ... Next. Nó không phân biệt hoa thường và dùng cùng các thư viện .NET với C#. Tạo dự án bằng dotnet new console -lang VB và chạy bằng dotnet run. VBA, ngôn ngữ macro bên trong Microsoft Office, là họ hàng cũ hơn với cú pháp tương tự.
Visual Basic .NET là gì và ai dùng nó
VB.NET là bản kế thừa trên .NET của Visual Basic cổ điển (VB6). Nó biên dịch ra cùng ngôn ngữ trung gian với C#, nên hai ngôn ngữ có thể dùng chung thư viện và thậm chí trộn trong một solution. Nó chủ yếu được dùng cho ứng dụng máy tính để bàn Windows (Windows Forms, WPF), công cụ nghiệp vụ nội bộ, ứng dụng web ASP.NET và bảo trì các cơ sở mã VB hiện có.
Microsoft vẫn hỗ trợ Visual Basic trên .NET hiện đại, nhưng đã cho biết không có kế hoạch phát triển ngôn ngữ với các tính năng mới lớn; các tính năng .NET mới thường xuất hiện ở C# trước. Với dự án mới không có sẵn mã VB, C# là lựa chọn phổ biến hơn, nhưng VB.NET vẫn là ngôn ngữ dễ đọc để học lập trình và viết phần mềm nghiệp vụ.
Cài đặt và chạy Hello, world
Cài .NET SDK (Windows, macOS hoặc Linux). Visual Studio trên Windows cũng có sẵn mẫu Visual Basic và trình thiết kế biểu mẫu trực quan.
dotnet new console -lang VB -o HelloVB
cd HelloVB
dotnet run
# Hello, world!' Program.vb
Imports System
Module Program
Sub Main(args As String())
Console.WriteLine("Hello, world!")
End Sub
End ModuleModule chứa các thủ tục dùng chung, và Sub Main là điểm vào. Chú thích bắt đầu bằng dấu nháy đơn '. Mỗi câu lệnh thường kết thúc ở cuối dòng; không có dấu chấm phẩy hay dấu ngoặc nhọn.
Biến và các kiểu cơ bản
Khai báo biến bằng Dim name As Type. Với Option Infer On (mặc định) bạn có thể bỏ kiểu khi gán giá trị. Hãy đặt Option Strict On ở đầu mỗi tệp (hoặc đặt trong dự án) để các chuyển đổi ngầm định rủi ro trở thành lỗi biên dịch.
| Kiểu | Ví dụ | Ghi chú |
|---|---|---|
| Integer | Dim n As Integer = 42 | 32 bit; Long là 64 bit |
| Double | Dim x As Double = 3.14 | Số dấu phẩy động 64 bit |
| Decimal | Dim price As Decimal = 19.99D | Số thập phân chính xác, phù hợp với tiền bạc |
| String | Dim s As String = "hello" | Nối chuỗi bằng & |
| Char | Dim c As Char = "a"c | Một ký tự đơn, hậu tố c |
| Boolean | Dim ok As Boolean = True | True / False |
| Date | Dim d As Date = #2026-01-15# | Giá trị ngày và giờ |
Option Strict On
Module Types
Sub Main()
Dim name As String = "Ana"
Dim age = 30 ' inferred as Integer
Console.WriteLine(name & " is " & age.ToString())
Console.WriteLine($"Next year {name} is {age + 1}")
Console.WriteLine(7 / 2) ' 3.5 (always Double)
Console.WriteLine(7 \ 2) ' 3 (integer division)
Console.WriteLine(7 Mod 2) ' 1
End Sub
End ModuleLuồng điều khiển
Dim score = 85
If score >= 90 Then
Console.WriteLine("A")
ElseIf score >= 80 Then
Console.WriteLine("B")
Else
Console.WriteLine("C")
End If
Select Case score
Case 90 To 100
Console.WriteLine("excellent")
Case 80 To 89
Console.WriteLine("good")
Case Else
Console.WriteLine("keep going")
End Select
For i = 1 To 3
Console.WriteLine($"{i} squared is {i * i}")
Next
Dim n = 3
Do While n > 0
n -= 1
LoopCác câu lệnh này nằm bên trong một Sub. For i = 1 To 3 gồm cả hai đầu; thêm Step -1 để đếm ngược. For Each item In collection lặp qua mọi collection. Dùng Exit For hoặc Exit Do để thoát vòng lặp sớm. Với điều kiện, nên dùng AndAlso và OrElse: chúng dừng đánh giá ngay khi biết kết quả, còn And và Or luôn đánh giá cả hai vế.
Sub, hàm và lambda
Sub không trả về giá trị; Function thì có. Tham số mặc định được truyền ByVal (một bản sao); ByRef cho phép thủ tục thay đổi biến của bên gọi. Tham số có thể là Optional với giá trị mặc định.
Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
Sub Greet(Optional name As String = "world")
Console.WriteLine($"Hello, {name}!")
End Sub
Sub Increment(ByRef value As Integer)
value += 1
End Sub
' Inside Sub Main:
Dim x = 5
Increment(x) ' x is now 6
Greet() ' Hello, world!
Dim square = Function(n As Integer) n * n ' lambda
Console.WriteLine(square(Add(1, 2))) ' 9Mảng, List và Dictionary
Dim nums() As Integer = {3, 1, 2}
Dim five(4) As Integer ' 5 elements, indexes 0 to 4
Array.Sort(nums)
Console.WriteLine(String.Join(", ", nums)) ' 1, 2, 3
Dim names As New List(Of String) From {"Ana", "Ben"}
names.Add("Cleo")
Console.WriteLine(names.Count) ' 3
Dim ages As New Dictionary(Of String, Integer)
ages("Ana") = 30
ages("Ben") = 17
For Each pair In ages
Console.WriteLine($"{pair.Key}: {pair.Value}")
NextMảng và danh sách được đánh chỉ số từ 0 bằng dấu ngoặc đơn: nums(0). Kiểu generic dùng Of: List(Of String) là dạng VB của List<string> trong C#. Lưu ý Dim five(4) khai báo cận trên chứ không phải độ dài, nên mảng có năm phần tử.
Tính năng nổi bật: lớp, thuộc tính và truy vấn LINQ
VB.NET hướng đối tượng hoàn toàn: lớp có thuộc tính, phương thức, hàm khởi tạo (Sub New), kế thừa (Inherits), interface (Implements) và sự kiện (Event, RaiseEvent, Handles). Truy vấn LINQ có thể viết bằng cú pháp truy vấn dễ đọc.
Public Class Person
Public Property Name As String
Public Property Age As Integer
Public Sub New(name As String, age As Integer)
Me.Name = name
Me.Age = age
End Sub
End Class
' Inside Sub Main:
Dim people As New List(Of Person) From {
New Person("Ana", 30),
New Person("Ben", 17)
}
Dim adults = From p In people
Where p.Age >= 18
Select p.Name
For Each adultName In adults
Console.WriteLine(adultName) ' Ana
NextVì VB không phân biệt hoa thường, Name và name là cùng một định danh; trong hàm khởi tạo, Me.Name chỉ thuộc tính còn name chỉ tham số. Những tiện ích riêng khác của VB gồm khối With ... End With, XML literal và namespace My cho các tác vụ thông dụng.
Xử lý lỗi
VB.NET dùng xử lý ngoại lệ có cấu trúc: Try, Catch, Finally và Throw. Một Catch có thể kèm bộ lọc When. Kiểu On Error GoTo cũ từ VB6 và VBA vẫn biên dịch được nhưng không nên dùng trong mã .NET mới.
Function ParseAge(s As String) As Integer
Dim n As Integer
If Not Integer.TryParse(s, n) Then
Throw New FormatException($"Not a number: {s}")
End If
If n < 0 Then Throw New ArgumentOutOfRangeException(NameOf(s))
Return n
End Function
' Inside Sub Main:
Try
Console.WriteLine(ParseAge("abc"))
Catch ex As FormatException
Console.WriteLine("Error: " & ex.Message) ' Error: Not a number: abc
Finally
Console.WriteLine("done")
End TryMột chương trình hoàn chỉnh nhỏ: tần suất từ
Imports System
Imports System.Collections.Generic
Imports System.Linq
Module WordCount
Sub Main()
Dim text = "the cat and the hat and the bat"
Dim counts As New Dictionary(Of String, Integer)
For Each word In text.Split(" "c)
If counts.ContainsKey(word) Then
counts(word) += 1
Else
counts(word) = 1
End If
Next
Dim top = counts.OrderByDescending(Function(kv) kv.Value).Take(2)
For Each kv In top
Console.WriteLine($"{kv.Key} {kv.Value}")
Next
End Sub
End Module
' the 3
' and 2VBA: Visual Basic bên trong Microsoft Office
Visual Basic for Applications (VBA) là ngôn ngữ macro tích hợp trong các ứng dụng Microsoft Office như Excel, Word và Access. Nó dựa trên Visual Basic cổ điển chứ không phải .NET: chạy bên trong ứng dụng Office, dùng mô hình đối tượng của Office (workbook, range, document) và được chỉnh sửa trong trình soạn thảo VBA (Alt+F11 trên Windows). Cú pháp cơ bản của Dim, If, For và Sub giống nhau, nên kiến thức VB.NET hữu ích cho VBA.
' VBA in Excel: write the squares of 1 to 5 into column A
Sub FillSquares()
Dim i As Long
For i = 1 To 5
Cells(i, 1).Value = i * i
Next i
MsgBox "Done"
End SubHọc tiếp ở đâu
- Microsoft Learn: tài liệu Visual Basic, gồm hướng dẫn bắt đầu và tài liệu tham khảo ngôn ngữ.
- Học thư viện lớp cơ sở .NET (collection, tệp, LINQ); thư viện này dùng chung với C#.
- Với ứng dụng máy tính để bàn, hãy thử mẫu Windows Forms hoặc WPF trong Visual Studio.
- Để tự động hóa Office, hãy đọc tài liệu tham khảo VBA trên Microsoft Learn cho ứng dụng bạn dùng.
Câu hỏi thường gặp
Visual Basic .NET đã chết chưa?
Chưa. Nó được hỗ trợ trên các phiên bản .NET hiện tại và trong Visual Studio, nhưng Microsoft không có kế hoạch thêm tính năng ngôn ngữ mới lớn, nên hầu hết dự án .NET mới chọn C#.
Khác nhau giữa VB.NET và VBA là gì?
VB.NET là ngôn ngữ .NET đầy đủ để xây dựng ứng dụng độc lập. VBA là ngôn ngữ macro dựa trên Visual Basic cổ điển, chạy bên trong các ứng dụng Office như Excel; cú pháp tương tự nhưng môi trường chạy và thư viện thì khác.
Nên học VB.NET hay C#?
Nếu bạn bảo trì mã VB hoặc muốn cú pháp rất dễ đọc, VB.NET là ổn. Với dự án mới, cơ hội việc làm và các tính năng .NET mới nhất, C# thường là khoản đầu tư tốt hơn, và các thư viện bạn học dùng chung được giữa hai ngôn ngữ.
Visual Basic có phân biệt hoa thường không?
Không. Dim Total, total và TOTAL đều chỉ cùng một biến, và trình soạn thảo thường tự chuẩn hóa cách viết hoa cho bạn.