Báo cáo thực tập- Tìm hiểu ngôn ngữ lập trình VB.NET

Hầu như bất kỳ ứng dụng nào cũng cần đến dữ liệu. Dữ liệu từ người dùng nhập vào, dữ liệu được lưu trữ trong ứng dụng và dữ liệu từ các hệ thống khác,… tất cả đều là nguồn thông tin mà ứng dụng cần xử lý với chức năng chính là hỗ trợ tìm kiếm, tính toán, thống kê và ra quyết định. Để thực hiện các chức năng xử lý dữ liệu, người lập trình cần phải có các công cụ lập trình chuyên dùng. Dữ liệu không đơn giản lưu trên các file văn bản hay file nhị phân với cấu trúc record do người lập trình định nghĩa. Thay vào đó, hầu hết các ứng dụng tổ chức dữ liệu logic dựa trên cấu trúc cơ sở dữ liệu quan hệ và lưu trữ vật lý dữ liệu dựa vào các hệ quản trị cơ sở dữ liệu quan hệ như Access, SQL Server, Oracle, DB2,…

doc91 trang | Chia sẻ: tue_kc | Lượt xem: 4956 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Báo cáo thực tập- Tìm hiểu ngôn ngữ lập trình VB.NET, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PHẦN I: CÁC ĐẶC ĐIỂM DỮ LIỆU 5 CHƯƠNG I: Các kiểu dữ liệu 5 I. Các kiểu dữ liệu và đặc điểm 5 1. Đặc điểm các kiểu dữ liệu trong .Net Platform 5 2. Kiểu String 5 3. Kiểu DateTime 7 4. Kiểu NumBer 8 II. Các kiểu dữ liệu nội tại của VB.NET gồm: 9 III. Biến - T ính chất, Khai báo và khởi tạo 10 1. Tính Chất 10 2. Khai báo v à khởi tạo 12 3. Mảng & Structure 14 a) Mảng 14 b) Structure 16 4. Các Toán Tử 16 CHƯƠNG II: Cấu trúc câu lệnh 18 I. Cấu Trúc Chọn 18 1. If … Then ….Else 18 2. Select …. Case 19 IV. Cấu Trúc Lặp 19 1. For … Next 20 2. For Each… Next 20 3. Do While… Loop 20 4. Do…Loop While 21 5. Do Until….Loop 21 6. Do Loop… Until 21 7. While… End While 21 CHƯƠNG III Thủ tục và hàm Và Sử lý Lỗi 21 I. Thủ Tục Và hàm 21 Thay đổi trong thủ tục và hàm 21 1. Khai báo Option Strict 22 2. Chuỗi có độ dài cố định 23 3. Chỉ Thị #Region… #End Region 23 4. Imports Không gian tên ( Namespase) 23 V. Sử lý Lỗi 24 1. Phân Loại Lỗi 24 2. Sử Lý Lỗi 24 PHẦN II: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG VB.NET 27 VI. Chưong 4 :Các tính chất 28 I. Tính trừu tượng 28 II. Tính Bao Bọc 28 III. Tính kế thừa 28 IV. Tính đa hình 29 V. Nạp chồng – Overloading 29 VII. Chương IV : Lớp (Class) 29 I. Tạo Một Namespase 30 II. Tạo một lớp kề thừa 30 III. Khai báo phương thức 31 IV. Khai báo thuộc tính 34 VIII. Chương VI: Sự kiện (Event) 36 I. Khai báo sự kiện 36 II. Phát sinh sự kiện 36 III. Kết hợp sự kiện với sử lý. 38 IX. Chương VII Từ khoá Me, MyBase, MyClass 38 I. Me 39 II. MyBase 39 III. MyClass 40 CHƯƠNG VIII Các điều khiển hiện thị 43 I. ComBoBox, ListBox, CheckListBox 43 X. DataGrid 44 1. Các thuộc tính của DataGrid 45 2. Các Phương thức của DataGrid 46 3. Các sự kiện của DataGrid 46 4. DataGridTableStyle và TableStyle 46 5. DatagridColumStyle và DataGridcolumnStyles 47 6. Thiết kế DataGrid 48 PHẦN III TỔNG QUAN VỀ ADO.NET 51 Chương IX: Đôi điều về ADO.NET 51 I. Tổng Quan – ADO.NET 51 XI. Kiến trúc – ADO.NET 52 XII. Các đặc điểm của ADO.NET 54 1. Interoperability – Tương tác giữa nhiều hệ thống khác nhau 54 2. Scalability - Hỗ trợ nhiều người dùng 54 3. Productivity - Mở rộng khả năng làm việc với CSDL 55 4. Performance - Hiệu quả cao trong xử lý dữ liệu 55 XIII. Đối tượng Sử lý dữ liệu 56 1. Dataset 56 2. DataTable 57 3. DataRelation 57 4. Rằng buộc quan hệ 57 5. DataView 58 XIV. Đối tượng thao tác dữ liệu 58 1. Connection 58 2. Command 59 3. DataReader 59 4. DataAdapter 59 Chương X: Một số đối tượng cơ bản trong ADO.NET 60 I. CONNECTION 60 1. Data Provider 61 2. ConnectionString 61 3. Các thuộc tính khác của Connection 63 4. Các phương thức trên Connection 63 5. Minh họa tạo Connection 63 XV. Command 64 1. Tạo Command 64 2. Các thuộc tính của Command 65 3. Parameter 65 4. Các thuộc tính của Parameter 66 5. Tạo Parameter với CreateParameter của Command 66 6. Thực hiện Command 67 XVI. DataReader 68 1. Các thuộc tính của DataReader 68 2. Các phương thức của DataReader 68 XVII. DataAdapter 68 1. Tạo DataAdapter 69 2. Các thuộc tính chính của DataAdapter 70 3. Các chức năng của DataAdapter 70 4. Tạo bộ lệnh cập nhật cho DataAdapter: 72 XVIII. Mô Hình xử lý dữ liệu trên ADO.NET 74 1. Đối tượng BindingContext 74 2. Đối tượng CurrencyManager 75 Chương XI: Mô hình đa tầng 75 I. Mô hình đa tầng (N-tier) 76 XIX. Xây dựng lớp xử lý lưu trữ 76 XX. Lớp xử lý lưu trữ - Các khai báo 76 XXI. Minh hoạ Mô hình đa tầng 76 PHẦN IV: BÁO BIỂU CRYSTAL REPORT 79 I. Giới thiệu Crystal Report 79 II. Tạo báo biểu 80 1. Nguồn dữ liệu cho báo biểu 80 2. Sử dụng Crystal Report Viewer để hiển thị báo biểu 81 3. Nguồn dữ liệu cho báo biểu từ DataSet 82 4. Lọc dữ liệu báo biểu 86 III. Tạo báo biểu 87 PHẦN III CHƯƠNG TRÌNH 89 I. YÊU CẦU BÀI TOÁN 89 II. MÔ HÌNH QUAN HÊ 89 III. FORM HIỂN THỊ 90 PHẦN I: CÁC ĐẶC ĐIỂM DỮ LIỆU CHƯƠNG I: Các kiểu dữ liệu Các kiểu dữ liệu và đặc điểm Đặc điểm các kiểu dữ liệu trong .Net Platform Các kiểu dữ liệu mặc nhiên phát sinh từ lớp SysTem.Object. Ngoài các phương thức kế thừa từ lớp SysTem.Oject, các biến kiểu dữ liệu còn có các phương thức và thuộc tính đặc thù. Các phương thức chung kế thừa từ SysTem.Object Equals: Hổ trợ việc so sánh giữa hai object. Finalize: Thực hiện các thao tác xóa bỏ trước khi object được tự động xóa bỏ. GetHashCode: Phát sinh một số tương ứng với giá trị của object. GetType: Trả về kiểu của object. ToString: Tạo ra chuỗi chứa nội dung mô tả một thể hiện của lớp. Dưới đây là các bảng liệt kê những phương thức và thuộc tính đặc thù của các kiểu dữ liệu. Do các phương thức có nhiều cách sử dụng khác nhau, nên trong các phần nói về phương thức chỉ mô tả công dụng. Cần tham khảo thêm trong MSDN để hiểu rõ cách dùng. Kiểu String Thuộc tính  Mô tả   Chars(i)  Trả về ký tự tại vị trí chỉ ra trong biến. Thuộc tính có tính chỉ đọc   Length  Trả về số ký tự trong biến.   Phương thức  Mô tả   Clone  Trả về một tham chiếu của biến.   Compare  Phương thức so sánh hai tham số kiểu String dựa vào thứ tự các ký tự theo ngôn ngữ qui định trong Regional Settings của từng ký tự và trả về: w-1 khi chuỗi thứ 1 nhỏ hơn chuỗi thứ 2 w0 khi chuỗi thứ 1 bằng chuỗi thứ 1 w1 khi chuỗi thứ 1 lớn hơn chuỗi thứ 2 wNgoài ra có thể có tham số qui định có phân biệt chữ Hoa chữ thường, v.v…   CompareOrdinal  So sánh hai tham số kiểu String dựa theo bảng mã các ký tự của các tham số. Hàm trả về hiệu của mã tham số thứ nhất và mã tham số thứ hai.   Concat  Nối các tham số lại với nhau và trả về chuỗi nối.   Copy  Tạo một thể hiện mới kiểu String có giá trị như tham số chuỗi truyền vào.   CopyTo  Sao chép một số ký tự chỉ ra từ một vị trí trên biến vào một vị trí chỉ ra trên mảng ký tự với số lượng ký tự truyền vào.   EndsWith  Trả về True/False cho biết các ký tự cuối của biến có khớp với chuỗi chỉ ra không.   Format  Thay thế phần biểu thức định dạng trong chuỗi bằng các các giá trị tương ứng đã được định dạng theo biểu thức.   IndexOf  Trả về vị trí đầu tiên tìm thấy chuỗi hoặc ký tự truyền vào trên biến, ; có thể sử dụng thêm vị trí bắt đầu tìm, trả về vị trí lần tìm thấy thứ mấy.   IndexOfAny  Trả về vị trí tìm thấy đầu tiên trên biến bất kỳ ký tự nào trong mảng ký tự truyền vào; có thể sử dụng thêm vị trí bắt đầu tìm, trả về vị trí lần tìm thấy thứ mấy.   Insert  Chèn vào một giá trị String truyền vào tại vị trí chỉ định trên biến.   Join  Nối các phần tử của mảng String truyền vào thành một chuỗi duy nhất với dấu nối là chuỗi dấu ngăn cách chỉ ra (separator)   LastIndexOf  Trả về vị trí tìm thấy cuối cùng trên biến, chuỗi hoặc ký tự truyền vào; có thể sử dụng thêm vị trí bắt đầu tìm, trả về vị trí lần tìm thấy thứ mấy.   LastIndexOfAny  Trả về vị trí tìm thấy cuối cùng trên biến bất kỳ ký tự nào trong mảng ký tự truyền vào; có thể sử dụng thêm vị trí bắt đầu tìm, trả về vị trí lần tìm thấy thứ mấy.   PadLeft  Nối thêm bên trái ký tự truyền vào với số lần sao cho độ dài tổng cộng bằng độ dài chỉ ra. Nếu độ dài tổng cộng chỉ ra nhỏ hơn độ dài của biến, không ký tự nào được thêm vào.   PadRight  Nối thêm bên phải ký tự truyền vào với số lần sao cho độ dài tổng cộng bằng độ dài chỉ ra. Nếu độ dài tổng cộng chỉ ra nhỏ hơn độ dài của biến, không ký tự nào được thêm vào.   Remove  Xóa bỏ một số ký tự chỉ ra khỏi biến từ vị trí truyền vào.   Replace  Thay thế tất cả ký tự hay chuỗi tìm thấy trên biến bằng ký tự hay chuỗi truyền vào.   Split  Trả về một mảng String với các phần tử chứa các chuỗi con được ngắt ra từ biến tùy theo ký tự ngăn cách truyền vào.   StartsWith  Cho biết trị bắt đầu của biến có khớp với chuỗi truyền vào.   Substring  Trả về một chuỗi con từ biến.   ToLower  Trả về bản sao của biến với các ký tự in thường.   ToUpper  Trả về bản sao của biến với các ký tự in HOA.   Trim  Trả về biến đã loại bỏ tất cả các ký tự từ đầu đến cuối của biến khớp với mảng ký tự truyền vào.   TrimEnd  Trả về biến đã loại bỏ tất cả các ký tự từ vị trí cuối của biến khớp với mảng ký tự truyền vào.   TrimStart  Trả về biến đã loại bỏ tất cả các ký tự từ vị trí đầu của biến khớp với mảng ký tự truyền vào.      Kiểu DateTime Field  Mô tả   MaxValue  Hiển thị giá trị lớn nhất của kiểu DateTime (chỉ đọc).   MinValue  Hiển thị giá trị nhỏ nhất của kiểu DateTime (chỉ đọc).      Thuộc tính  Mô tả   Date  Trả về giá trị ngày tháng năm của biến.   Day  Trả về giá trị ngày trong tháng của biến.   DayOfWeek  Trả về giá trị ngày trong tuần của biến, với ngày đầu tiên là Chủ nhật có giá trị là 0.   DayOfYear  Trả về giá trị ngày trong năm của biến.   Hour  Trả về giá trị giờ của biến.   Millisecond  Trả về giá trị phần ngàn giây của biến.   Minute  Trả về giá trị phút của biến.   Month  Trả về tháng của biến.   Now  Trả về giá trị ngày giờ hiện hành của hệ thống.   Second  Trả về giá trị giây của biến.   TimeOfDay  Trả về giá trị giờ phút giây của biến.   Today  Trả về ngày hiện hành.   Year  Trả về năm của biến.   Phương thức  Mô tả   AddDays  Thêm số ngày truyền vào cho giá trị của biến.   AddHours  Thêm số giờ truyền vào cho giá trị của biến.   AddMilliseconds  Thêm số phần ngàn giây truyền vào cho giá trị của biến.   AddMinutes  Thêm số phút truyền vào cho giá trị của biến.   AddMonths  Thêm số tháng truyền vào cho giá trị của biến.   AddSeconds  Thêm số giây truyền vào cho giá trị của biến.   AddYears  Thêm số năm truyền vào cho giá trị của biến.   Compare  So sánh hai biến ngày giờ và cho biết biến nào lớn hơn.   CompareTo  So sánh biến với một tham số Object.   DaysInMonth  Cho biết số ngày trong tháng theo tham số tháng, năm truyền vào.   IsLeapYear  Cho biết giá trị năm truyền vào (dạng yyyy) có phải là năm nhuận hay không.   Subtract  Trừ một giá trị thời gian khỏi biến.   ToLongDateString  Chuyển giá trị biến ra định dạng Long Date.   ToLongTimeString  Chuyển giá trị biến ra định dạng Long Time.   ToShortDateString  Chuyển giá trị biến ra định dạng Short Date.   ToShortTimeString  Chuyển giá trị biến ra định dạng Short Time.   ToString  Trả về chuỗi trị của biến theo định dạng truyền vào   Kiểu NumBer Phần này nói chung cho các kiểu số Byte, Short, Integer, Long, Single, Double, Decimal Field  Mô tả   MaxValue  Hiển thị giá trị lớn nhất của kiểu (chỉ đọc).   MinValue  Hiển thị giá trị nhỏ nhất của kiểu (chỉ đọc).   Ngoại trừ kiểu String, các kiểu khác khi muốn chuyển sang kiểu chuỗi đều có thể dùng phương thức ToString (kế thừa từ lớp Object) để chuyển đổi và định dạng cùng lúc. Cú pháp sử dụng: ToString() ToString() Dưới đây là bảng biểu thức định dạng Biểu thức  Ý nghĩa  Ví dụ   c, C  Định dạng tiền tệ  12345.67 ToString(“C”) hiển thị $ 12,345.67   e, E  Định dạng số khoa học.  12345.67 ToString(“E”) hiển thị 1.234567E+0004   f, F  Định dạng cố định  12345.67 ToString(“F”) hiển thị 12345.67 (với 2 số lẻ)   g, G  Định dạng tổng quát  12345.67 ToString(“G”) hiển thị 12345.67 tùy theo gía trị có thể hiện thị dưới dạng E hoặc F   n, N  Định dạng số  12345.67 ToString(“N”) hiển thị 12,345.67   p, P  Định dạng phần trăm  0.45 ToString(“P”) hiển thị 45 %   x, X  Định dạng Thập lục phân  250 ToString(“X”) hiển thị FA   Ngoài ra chúng ta cũng có thể sử dụng các ký tự sau đây để lập biểu thức định dạng Ký tự  Ý nghĩa  Kết quả   0  Số không giữ chỗ  123 ToString(“0000”) hiển thị 0123   #  Số bất kỳ giữ chỗ  123 ToString(“####”) hiển thị 123   .  Dấu phần lẻ  123 ToString(“####.00”) hiển thị 123.00   ,  Dấu chia cụm ba số  12345 ToString(“#,###”) hiển thị 12,345   %  Dấu phần trăm  0.45 ToString(“# %”) hiển thị 45 %   E+0,E-0,e+0, e-0  Dấu hiển thị số khoa học  12345678 ToString(“#.#######E+000”) hiển thị 1.2345678E+007   \  Ký tự literal  123456 ToString(“\# #,###”) hiển thị # 123,456   ; Ký tự ngăn cách vùng  Ký tự ngăn cách vùng  Với ToString(“dương #,###;âm #,###; số không”) -123456 hiển thị âm 123,456 0 hiển thị số không   Các kiểu dữ liệu nội tại của VB.NET gồm: Kiểu VB.Net  Kiểu CLR System.x  Vùng nhớ (Byte)  Type Code  Miền giá trị   Boolean  Boolean  2  3  True hoặc False.   Byte  Byte  1  6  0 đến 255 (không dấu).   Char  Char  2  4  0 đến 65535 (không dấu).   DateTime  DateTime  8  16  0:00:00 ngày 01 tháng Giêng 0001 đến 23:59:59 ngày 31 tháng Mười Hai 9999.   Decimal  Decimal  16  15  0 đến +/-79,228,162,514,264, 337,593,543,950,335 nếu không có số lẻ; 0 đến +/-7.9228162514264337 593543950335 với 28 số lẻ; số nhỏ nhất khác không là +/- 0.0000000000000000000000000001 (+/-1E-28).   Double  Double  8  14  -1.79769313486231570E+308 đến -4.94065645841246544E -324 đối với số âm; 4.94065645841246544E-324 đến 1.79769313486231570E +308 với số dương.   Integer  Int32  4  9  -2,147,483,648 đến 2,147,483,647.   Long  Int64  8  11  -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807.   Object  Object (Class)  4     Bất kỳ kiểu dữ liệu nào có thể chứa trong biến kiểu Object.   Short  Int16  2  7  -32,768 đến 32,767.   Single  Single  4  13  -3.4028235E+38 đến -1.401298E-45 với số âm; 1.401298E-45 đến 3.4028235E+38 với số dương.   String  String (Class)     8  0 đến khoảng 2 tỷ ký tự Unicode   User-Defined Type  (kế thừa từ ValueType)        Mỗi thành phần của Structure có miền giá trị theo kiểu dữ liệu của thành phần.   Khi khai báo một kiểu dữ liệu cơ bản, không hẳn biến sẽ sử dụng vùng nhớ như yêu cầu lưu trữ. Ví dụ, mảng cần thêm vùng nhớ cho chính bản thân mảng cũng như cho mỗi chiều (dimension). Mỗi biến Object tham chiếu đến một thành phần hoặc một kiểu hỗn hợp sử dụng 4 byte vùng nhớ ngoài số vùng nhớ cần dùng cho kiểu dữ liệu chứa trong nó. Biến - T ính chất, Khai báo và khởi tạo Tính Chất Biến là một thực thể với 6 tính chất sau:     Name: Tên của biến Address: Địa chỉ vùng nhớ nơi lưu giữ giá trị của biến. Trong chu kỳ trình sống, địa chỉ của biến có thể thay đổi. Type: Kiểu của biến, còn gọi là kiểu dữ liệu Value: Giá trị của biến Scope: Phạm vi sử dụng của biến. Mỗi biến có một phạm vi sử dụng là phạm vi trong chương trình nơi biến được nhìn nhận đối với câu lệnh. ·Phạm vi khối lệnh và phạm vi thủ tục Khi biến được khai báo trong một khối lệnh (tập hợp các từ khóa kết thúc bằng End …, Loop, Next), biến có phạm vi sử dụng trong khối lệnh Ví dụ: If x 0 then      Dim a as Integer      a = 1/x End If MsgBox CStr(a)) Đoạn lệnh trên sẽ gây lỗi tại dòng MsgBox CStr(a)) vì biến a chỉ có phạm vi sử dụng trong khối lệnh If … End If Khi biến được khai báo trong một thủ tục nhưng không trong một khối lệnh, biến sẽ có phạm vi sử dụng trong toàn thủ tục. Biến có phạm vi khối lệnh và phạm vi thủ tục là biến cục bộ. ·Phạm vi module và phạm vi project Có những khác biệt trong phạm vi sử dụng đối với các biến khai báo chung trong Module chuẩn (Standard module) và Lớp (Class module). Trước tiên, chúng ta cần lưu ý rằng bản thân Module chuẩn được khai báo với một trong ba từ khóa sau: Public, Friend và Private (mặc định) Tùy theo từ khóa mà phạm vi sử dụng của các thành phần trong module bị giới hạn. Ví dụ một biến Public khai báo trong một module Friend sẽ có phạm vi sử dụng Friend - Truy xuất Private: nếu biến được khai báo trên phần Declaration của module với từ khóa Private sẽ chỉ có phạm vi sử dụng trong module. - Truy xuất Friend: nếu biến được khai báo trên phần Declaration của module với từ khóa Friend sẽ có phạm vi sử dụng trong toàn project. Các project khác không thể sử dụng biến này. - Truy xuất Public: nếu biến được khai báo trên phần Declaration của module với từ khóa Public sẽ có phạm vi sử dụng trong toàn project và trong bất kỳ project nào bên ngoài có một tham chiếu (reference) đến project đó. ¤LifeTime: thời gian tồn tại của biến. Trong khi phạm vi sử dụng của biến xác định nơi chốn biến được phép sử dụng, thì thời gian tồn tại của biến xác định khi nào biến được sử dụng. Khai báo v à khởi tạo 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 Để nhấn mạnh vai trò của hàm tạo (constructor), chúng ta có thể viết: 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  Mô tả   Public  Sử dụng toà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   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. Ngược lại, khi một biến kiểu tham chiếu được khai báo, trình biên dịch sẽ tạo đối tượng trên vùng nhớ, 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ú ý
Tài liệu liên quan