Lệnh khai báo biến là cú pháp kết hợp tên biến và kiểu dữ liệu. Tự thân lệnh này khơng hàm ý tạo biến. Tuy nhiên, với các biến khơng phải kiểu đối tượng, lệnh khai báo biến cũng chính là lệnh tạo biến
Cú pháp:
Dim x as Integer
Dim x as Integer = New Integer()
Khi khai báo nhiều biến trên cùng dịng và khơng chỉ ra kiểu của biến, biến sẽ lấy kiểu dữ liệu của biến khai báo dữ liệu tường minh tiếp sau đĩ
Dim x as Integer, a, b, c as Long Các biến a, b, c đều cùng cĩ kiểu Long
Cĩ thể khai báo và khởi tạo giá trị cho biến cùng lúc: Dim x as Integer = 100, y as Integer = 200
Trong cách này, phải khai báo tường minh kiểu dữ liệu cho từng biến. Với các biến kiểu đối tượng, cách khai báo cũng như thế
Dim objA as MyClass
Lệnh trên chưa tạo ra biến đối tượng và sau dịng lệnh, objA vẫn là Nothing Những cách sau đây sẽ khai báo và tạo biến đối tượng:
Dim objA as New MyClass() Hoặc
Dim objA as MyClass = New MyClass() Hoặc
Dim objA as MyClass objA = New MyClass() Các từ khĩa để khai báo biến
Từ khĩa khai báo
Từ khĩa Ý nghĩa
Public Sử dụng tồn cục
Private Sử dụng cục bộ trong phạm vi khai báo như Dim Friend Sử dụng trong phạm vi của project
Protected Sử dụng trong phạm vi của lớp và các lớp con Protected Friend Sử dụng trong phạm vi của Proctected và Friend
II.3. Kiểu trị và tham chiếu (Value Type và Reference Type)
Các kiểu được định nghĩa trong Common Type System thuộc ba loại sau:
Kiểu trị (Value Type)
Kiểu tham chiếu (Reference Type)
Kiểu con trỏ (Pointer Type)
VB.Net khơng cĩ kiểu con trỏ nên chúng ta chỉ xem xét kiểu trị và kiểu tham chiếu.
Khi một biến kiểu trị được khai báo, một vùng nhớ được dành riêng để chứa giá trị thực của biến.
nhưng sẽ gán cho biến bốn byte chứa địa chỉ của đối tượng. Tĩm lại, biến kiểu trị chứa giá trị của biến cịn biến kiểu tham chiếu chỉ đến nơi chứa giá trị.
Sự khác biệt này dẫn đến nhiều hệ quả mà phép gán là một. Để minh họa chúng ta xem Class sau với một thuộc tính:
Ví dụ:
Public Class Nguoi Public tuoi as Short End Class
Và kiểu Structure cũng cĩ một thuộc tính: Structure ConNguoi
Public tuoi as Short End Structure
Class là kiểu tham chiếu trong khi Structure là kiểu trị. Hãy xem xét đoạn lệnh sau:
Dim Ng1, Ng2 as Nguoi Dim CNg1, CNg2 as ConNguoi Ng1 = New Nguoi() Ng1.tuoi = 30 Ng2 = Ng1 Ng2.tuoi = 20 Debug.WriteLine(Ng1.tuoi) ' xuất ra 20 Debug.WriteLine(Ng2.tuoi) ' xuất ra 20 CNg1 = New ConNguoi() CNg1.tuoi = 30 CNg2 = CNg1 CNg2.tuoi = 20 Debug.WriteLine(CNg1.tuoi)' xuất ra 30 Debug.WriteLine(CNg2.tuoi)' xuất ra 20
Khi được gán cho nhau, hai biến tham chiếu Ng1, Ng2 cùng chứa địa chỉ trỏ đến một đối tượng. Vì vậy thay đối giá trị của thuộc tính tuoi trên biến này, thay đổi cũng phản ánh trên biến kia.
Ngược lại, khi được gán cho nhau, biến tham trị sẽ tạo nên một vùng nhớ chứa trị mới, hai biến trị CNg1, CNg2 cùng chứa trị như nhau nhưng trên hai vùng nhớ khác nhau. Do đĩ, giá trị của thuộc tính tuoi của hai biến được chứa trên hai vùng nhớ và độc lập nhau.
Chú ý: Kiểu String cũng là kiểu tham chiếu nhưng cĩ một số đặc tính của kiểu trị.
Chúng ta xét đoạn lệnh sau: Dim ch1, ch2 as String ch1 = "Chuỗi 1"
ch2 = "Chuỗi 2"
MsgBox(ch1) ' xuất ra Chuỗi 1
Chúng ta nghĩ rằng ch1 chứa "Chuỗi 2", nhưng ch1 lại chứa "Chuỗi 1". Lý do như sau: khi biến kiểu String đã được tạo ra, giá trị của chúng khơng thể sửa đổi. Sửa đổi trị của biến String là tạo ra một thể hiện mới chứa nội dung sửa đổi. Do vậy:
Khi gán ch2 = ch1, ch2 trỏ đến cùng một chuỗi như ch1
Nhưng khi gán ch2 = "Chuỗi 2" do khơng thể thay đổi giá trị nên ch2 trỏ đến một thể hiện mới khác với ch1
Bảng sau đây cho biết kiểu dữ liệu thuộc kiểu trị hay kiểu tham chiếu:
Phân loại
Value Type Reference Type
Các kiểu dữ liệu số
Kiểu Boolean, Char, Date
Kiểu Structure, ngay cả khi các thành phần trong Structure là kiểu tham chiếu.
Kiểu String
Mảng
Kiểu lớp đối tượng
II.4. Kiểu Enum (Enumeration)
Kiểu Enum là sự liên kết một tập hợp các trị hằng với các tên gợi nhớ. Các trị này mặc nhiên cĩ kiểu Integer và chỉ cĩ thể là kiểu Byte, Short, Long hoặc Integer.
Kiểu Enum chỉ được tạo trong các Class hoặc Module
Cú pháp:
[Public | Protected | Friend | Protected Friend | Private] [ Shadows ] Enum <tên> [ As <Kiểu DL>] <tên thành phần thứ 1> [ = trị hằng 1] <tên thành phần thứ 2> [ = trị hằng 2] ... <tên thành phần thứ 3> [ = trị hằng 3] End Enum Ví dụ:
Public Enum DoTuoi as Integer Nhidong = 0
Thieunien = 1 Thanhnien = 2 Trungnien = 3 End Enum
Khi khơng chỉ ra trị hằng, VB.NET sẽ gán trị cho thành phần đầu tiên là 0 và tăng dần cho các thành phần kế tiếp:
Ví dụ:
Public Enum DoTuoi as Integer Nhidong ' mặc nhiên cĩ trị 0 Thieunien ' mặc nhiên cĩ trị 1 Thanhnien ' mặc nhiên cĩ trị 2 Trungnien ' mặc nhiên cĩ trị 3 End Enum
Nếu chỉ gán trị hằng cho thành phần đầu tiên, các thành phần kế tiếp sẽ nhận giá trị tăng dần: Public Enum DoTuoi as Integer
Nhidong = 100
Thieunien ' mặc nhiên cĩ trị 101 Thanhnien ' mặc nhiên cĩ trị 102 Trungnien ' mặc nhiên cĩ trị 103 End Enum
Sau khi khai báo kiểu Enum, chúng ta cĩ thể khai báo biến kiểu Enum cũng như sử dụng các thành phần của kiểu này thay cho các trị hằng.
Dim a As DoTuoi a =