Bài giảng Lập trình Windows - Trường Cao đẳng nghề Việt Đức - Vĩnh Phúc

pdf 184 trang Gia Huy 17/05/2022 2150
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Windows - Trường Cao đẳng nghề Việt Đức - Vĩnh Phúc", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_windows_truong_cao_dang_nghe_viet_duc_vi.pdf

Nội dung text: Bài giảng Lập trình Windows - Trường Cao đẳng nghề Việt Đức - Vĩnh Phúc

  1. MẪU ĐT -BG-01 TRƯỜNG CAO ĐẲNG NGHỀ VIỆT ĐỨC VĨNH PHÚC KHOA CÔNG NGHỆ THÔNG TIN BÀI GIẢNG LẬP TRÌNH WINDOWS Đối tượng: HSSV trình độ Đại học, Cao đẳng Ngành đào tạo: Công nghệ thông tin Lưu hành nội bộ
  2. MỤC LỤC MỤC LỤC i LỜI GIỚI THIỆU v Chương 1: TỔNG QUAN VỀ LẬP TRÌNH .NET 1 1.1 Visual Studio.NET và .NET Framework 1 1.1.1 Giới thiệu 1 1.1.2 Cấu trúc .NET Framework 2 1.1.3 Một số đặc trưng của Visual Studio .NET 5 1.2 Cài đặt phần mềm Visual Studio 2005 6 1.2.1 Yêu cầu phần cứng 6 1.2.2 Cài đặt: 6 1.3 Visual Basic.NET 10 1.3.1 Các phương pháp lập trình trong VB.NET 10 1.3.2 Visual Basic.NET 11 1.3.3 Ví dụ 1 - Hello, World 12 1.3.4 Ví dụ 2 - Hello, Windows 15 1.3.5 Ví dụ 3 - Hello, Browser 16 Chương 2: NGÔN NGỮ LẬP TRÌNH VISUAL BASIC .NET 18 2.1 Các kiểu dữ liệu và đặc điểm 18 2.1.1 Các kiểu dữ liệu 18 2.1.2 Đặc điểm của các kiểu dữ liệu 19 2.1.3 Biểu diễn các giá trị 24 2.2 Biến, hằng 24 2.2.1 Biến và tính chất 24 2.2.2 Khai báo và khởi tạo giá trị cho biến 25 2.2.3 Xác định phạm vi biến (tầm vực của biến) 26 2.2.4 Hằng và số ngẫu nhiên 27 2.2.5 Chuyển đổi các kiểu dữ liệu 28 2.3 Toán tử 29 2.3.1 Toán tử toán học 29 2.3.2 Toán tử nối chuỗi 29 2.3.3 Toán tử gán 29 2.3.4 Toán tử so sánh 30 2.3.5 Toán tử luận lý và bitwise 30 2.4 Các lệnh VB.NET 31 2.4.1 Chú thích và cách viết lệnh 31 2.4.2 Nhập/xuất dữ liệu 31 i
  3. 2.4.3 Các lệnh rẽ nhánh 36 2.4.4 Câu lệnh lặp 39 2.5 Dữ liệu có cấu trúc 42 2.5.1 Enum 42 2.5.2 Mảng 43 2.5.3 Structure 45 2.6 Xử lý lỗi 46 2.6.1 Phân loại lỗi 46 2.6.2 Xử lý lỗi 46 2.7 Một số chỉ thị của VB.NET 49 2.7.1 Chỉ thị Option Explicit ON|OFF 49 2.7.2 Chỉ thị #Region #End Region 49 2.8 Thủ tục (Procedure) 50 2.8.1 Khái niệm 50 2.8.2 Tham số của thủ tục 50 2.8.3. Sub Procedure 50 2.8.4 Function Procedure (Hàm) 53 Chương 3: LỚP VÀ ĐỐI TƯỢNG TRONG VB.NET 57 3.1 Tổng quan về lập trình hướng đối tượng 57 3.1.1 Tính trừu tượng 58 3.1.2 Tính bao bọc 58 3.1.3 Tính kế thừa 58 3.1.4 Tính đa hình 58 3.2 Lớp đối tượng 59 3.2.1 Khai báo lớp 59 3.2.2 Đối tượng 60 3.2.3 Phương thức 60 3.2.4 Ví dụ về thiết kế lớp 60 3.3 Phương thức thiết lập và phương thức phá hủy 61 3.3.1 Phương thức thiết lập 61 3.3.2 Phương thức phá hủy 64 3.4 Thuộc tính - Property 64 3.5 Khai báo sự kiện (Event) 68 3.5.1 Phát sinh sự kiện 68 3.5.2. Kết hợp sự kiện với xử lý sự kiện 69 3.6 Từ khóa Me, Mybase, MyClass 70 3.6.1. Me 70 ii
  4. 3.6.2. Mybase 70 3.6.3 MyClass 71 Chương 4: CÁC ĐIỀU KHIỂN NGƯỜI DÙNG 73 4.1 Tạo ứng dụng Windows Form 73 4.1.1 Mở một project mới 73 4.1.2 Thao tác với project 76 4.2 Biểu mẫu - Form 76 4.2.1 Thuộc tính, biến cố và phương thức của biểu mẫu 77 4.2.2 Thao tác với form trong một ứng dụng 79 4.2.3 Viết code cho các biến cố trên form 79 4.2.4 Form MDI 81 4.3 Label, Textbox, Button 81 4.3.1 Nhãn - Label 81 4.3.2 Ô nhập liệu - Textbox 82 4.3.3 Nút lệnh - Command Button 84 4.4 Check box, Radio Button 86 4.4.1 Hộp kiểm - Check box 86 4.4.2 Nút chọn - Radio button 87 4.4.3 Ví dụ về form sử dụng điều khiển check box và radio button 87 4.5 Combo box, list box: 90 4.5.1 Danh sách lựa chọn - list box 90 4.5.2 Điều khiển hộp lựa chọn (Combo box) 91 4.5.3 Ví dụ về sử dụng list box 92 4.6 Điều khiển thanh cuộn 93 4.7 Menu và Toolbar 95 4.7.1 Menu 95 4.7.2 Toolbar 96 Chương 5: PHÁT TRIỂN ỨNG DỤNG CƠ SỞ DỮ LIỆU 103 5.1 Tổng quan về ADO.NET 103 5.1.1 Managed Provider 104 5.1.2 Data Storage 104 5.2 Connection 106 5.2.1. Kết nối sử dụng OLEDB 106 5.2.2 Kết nối sử dụng SQLClient 108 5.2.3 Các thuộc tính khác của Connection 109 5.2.4 Các phương thức trên Connection 109 5.2.5 Minh họa tạo Connection 110 iii
  5. 5.3 Command 112 5.3.1 Tạo Command 112 5.3.2 Các thuộc tính của Command 112 5.3.3 Thực hiện câu lệnh thông qua đối tượng Command 113 5.3.4 Parameter 115 5.4 DataReader 121 5.4.1 Các thuộc tính của DataReader 121 5.4.2 Các phương thức của DataReader 121 5.4.3 Tạo và sử dụng DataReader 122 5.5 DataAdapter 123 5.5.1 Tạo DataAdapter 124 5.5.2 Thuộc tính của DataAdapter 126 5.5.3 Chức năng của DataAdapter 126 5.5.3 Sử dụng DataAdapter lấy cấu trúc từ nguồn dữ liệu 129 5.5.4 Tạo bộ lệnh cập nhật cho DataAdapter: 130 5.5.5 Dùng DataAdapter cập nhật các thay đổi về nguồn dữ liệu 130 5.6 DataSet 131 5.6.1 Tạo DataSet 132 5.6.2. Làm việc với DataSet 132 5.6.3 Ví dụ minh họa làm việc với DataSet 137 5.7 DataTable 146 5.7.1 Các thuộc tính của DataTable 146 5.7.2 Một số phương thức của DataTable 147 5.7.3 Một số sự kiện của DataTable 149 5.7.4. Cấu trúc của bảng - DataColumn 149 5.7.5 DataRow 151 5.7.6 Tập hợp Rows 152 5.8 Tạo báo biểu 163 5.8.1 Crystal Report 163 5.8.2 Hướng dẫn sử dụng report wizart. 163 TÀI LIỆU THAM KHẢO 174 iv
  6. LỜI GIỚI THIỆU Lập trình ứng dụng là môn học rất quan trọng đối với sinh viên ngành công nghệ thông tin. Lập trình không chỉ là một công việc đó còn là một thú vui và là một niềm đam mê. Đã có rất nhiều các ngôn ngữ lập trình được sinh ra theo nhu cầu và yêu cầu của thực tế. Và bạn có thể chọn bất kì theo sở thích và thiên hướng của bạn. Nhưng thực tế, ngôn ngữ lập trình chỉ là cái để chúng ta có thể sai bảo được máy tính, khiến nó hiểu và thực hiện những điều chúng ta chờ đợi. Kết quả đó phụ thuộc vào cấu trúc ngôn ngữ, vào nền tảng ngôn ngữ, vào những hỗ trợ và đặc tính của ngôn ngữ; một phần quan trọng đó là thuật toán - tư duy logic và trừu tượng của người lập trình. Hiện nay có rất nhiều các ngôn ngữ lập trình chuyên nghiệp có thể sử dụng tốt để lập trình các ứng dụng trong đó có thể nói Visual Basic.NET là một trong những công cụ lập trình trực quan dễ học nhất. Bài giảng này được xây dựng với mục đích phục vụ nhu cầu học môn Lập trình Windows cho học sinh, sinh viên hệ Cao đẳng, Đại học chuyên ngành Công nghệ thông tin trường Đại học Kinh tế Kỹ thuật Công nghiệp. Bài giảng đề cập đến những nội dung về lập trình Visual Basic.NET căn bản và các kỹ thuật lập trình cơ sở dữ liệu sử dụng ADO.NET. Kết quả cuối cùng là tạo ra các ứng dụng quản lý sử dụng Visual Basic.NET như một công cụ phát triển trên hệ cơ sở dữ liệu SQL Server. Bài giảng được biên soạn theo đúng chương trình đào tạo và các quy định về cách trình bày của Nhà trường. Nội dung của bài giảng bao gồm 5 chương, trong mỗi chương bao gồm các phần nội dung chủ yếu như sau: - Mục tiêu của chương. - Nội dung phần thảo luận. - Tóm tắt nội dung cốt lõi. - Bài tập thực hành. - Hướng dẫn tự học ở nhà. Do thời gian và trình độ có hạn nên bài giảng khó có thể tránh khỏi những thiếu sót nhất định. Chúng tôi luôn mong nhận được sự góp ý của bạn đọc để bài giảng được tái bản hoàn thiện hơn trong những lần sau. Xin chân thành cám ơn! Nhóm biên soạn Nhóm sửa chữa Vũ Thị Thu Huyền Lê Kiều Oanh v
  7. BỘ CÔNG THƯƠNG CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐẠI HỌC KT - KT CÔNG NGHIỆP Độc lập - Tự do - Hạnh phúc KHOA CÔNG NGHỆ THÔNG TIN CHƯƠNG TRÌNH TRÌNH ĐỘ ĐẠI HỌC NGÀNH ĐÀO TẠO: CÔNG NGHỆ THÔNG TIN ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN 1. Tên học phần: Lập trình Window Mã số học phần: 2. Số tín chỉ: 04 3. Tính chất học phần: Bắt buộc. 4. Học phần thay thế, tương đương: Không. 5. Phân bổ thời gian giảng dạy trong học kỳ: 4(52,16,6)/ 12 (12 tuÇn thùc häc) - Số tiết thực lên lớp: 68 tiết Lý thuyết: 6 tiết/tuần x 8 tuần + 4 tiết/tuần x 1 tuần =52 tiết = 52 tiết chuẩn. Thảo luận, thực hành môn học: 12 tiết/tuần x 2 tuần + 8 tiết/tuần x 1 tuần = 32 tiết = 16 tiết chuẩn. - Số giờ sinh viên tự học: 10 giờ/tuần x 12 tuần = 120 giờ. 6. Điều kiện học: - Học phần tiên quyết: Cơ sở dữ liệu, SQL Server - Học phần học trước: Không - Học phần song hành: Phân tích và thiết kế hệ thống 7. Mô tả vắn tắt nội dung học phần: Học phần trang bị cho sinh viên các kiến thức về .NET Framwork; cú pháp và cách sử dụng các cấu trúc lệnh trong ngôn ngữ lập trình Visual Basic .NET; cách làm việc với các điều khiển Windows, phương pháp kết nối với cơ sở dữ liệu và xây dựng các ứng dụng cơ sở dữ liệu. 8. Mục tiêu của học phần: Sau khi kết thúc học phần sinh viên sẽ có kỹ năng lập trình trên hệ điều hành Windows; kỹ năng làm việc với các điều khiển để thiết kế màn hình và phải xây dựng được các chương trình truy xuất cơ sở dữ liệu SQL. vi
  8. 9. Nội dung chi tiết học phần (6 tiết / tuần) Tài liệu học Hình Tuần Nội dung tập, tham thức khảo học 1 Chương 1: Tổng quan về Lập trình .NET 1 Giảng 1.1 Visual Studio.NET và .NET Framework 1.2. Cài đặt phần mềm Visual Studio 2005 1.3. Visual Basic.NET 2,3 Chương 2: Ngôn ngữ lập trình Visual Basic.NET 1 Giảng 2.1 Các kiểu dữ liệu và đặc điểm 2.2 Biến, hằng 2.3 Toán tử 2.4 Các lệnh VB.NET 2.5 Dữ liệu có cấu trúc 2.6 Xử lý lỗi 2.7 Một số chỉ thị của VB.NET 2.8 Thủ tục (Procedure) 4 Chương 3: Lớp và đối tượng trong VB.NET 1, 2, 3, 4 Giảng 3.1 Tổng quan về lập trình hướng đối tượng 3.2 Lớp đối tượng 3.3 Phương thức thiết lập và phương thức phá hủy 3.4 Thuộc tính - Property 3.5 Khai báo sự kiện (Event) 3.6 Từ khóa Me, Mybase, MyClass 5,6 Chương 4: Các điều khiển người dùng 1, 2, 5 Giảng 4.1 Tạo ứng dụng Windows Form 4.2 Biểu mẫu - Form 4.3 Label, Textbox, Button 4.4 Check box, Radio Button 4.5 Combo box, list box: 4.6 Điều khiển thanh cuộn 4.7 Menu và Toolbar 7 Thực hành 1, 5, 6 Thực hành 8-10 Chương 5: Phát triển ứng dụng cơ sở dữ liệu 1, 2, 5,6 Giảng 5.1 Tổng quan về ADO.NET 5.2 Connection 5.3 Command vii
  9. Tài liệu học Hình Tuần Nội dung tập, tham thức khảo học 5.4 DataReader 5.5 DataAdapter 5.6 DataSet 5.7 DataTable 5.8 Tạo báo biểu 11,12 Thực hành, thảo luận, kiểm tra 1, 3, 5, 6 Thực hành, thảo luận 10. Tài liệu học tập: 1. Bài giảng Lập trình Windows - Đại học Kinh tế Kỹ thuật Công nghiệp. 11. Tài liệu tham khảo: 2. Tài liệu hướng dẫn giảng dạy Visual Basic.NET - Đại học Khoa học tự nhiên thành phố Hồ Chí Minh, 2006 3. Kỹ thuật lập trình ứng dụng chuyên nghiệp Visual Basic.NET- Phạm Hữu Khang, 2002 4. Visual Studio.Net – Nguyễn Ngọc Tuấn, NXB Thống kê 2005 5. Lập trình Visual Basic.NET 1 (Nhập môn lập trình) - Đại học Khoa học tự nhiên TP. Hồ Chí Minh, 2006 6. Lập trình Visual Basic.NET 2 (Kỹ thuật lập trình công nghệ .NET) - Đại học Khoa học tự nhiên TP. Hồ Chí Minh, 2006 12. Nhiệm vụ của Sinh viên: - Dự lớp đầy đủ, đúng giờ các buổi học lý thuyết và thực hành, thực hiện tốt các nội quy của Nhà trường trong giờ lên lớp - Thực hiện tốt các bài tập, hoàn thành các bài tập thực hành, tích cực tham gia thảo luận theo yêu cầu của giáo viên. - Phải đọc và nghiên cứu trước bài giảng, tài liệu tham khảo, chuẩn bị các ý kiến, đề xuất khi nghe giảng. 13. Tiêu chuẩn đánh giá Sinh viên: - Theo quyết định số 43 / 2007 / QĐ-BGD&ĐT ngày 15 tháng 08 năm 2007 của Bộ trưởng Bộ Giáo dục và Đào tạo. viii
  10. - Theo quyết định số 674/QĐ-ĐHKTKTCN ngày 15 tháng 10 năm 2010 của Hiệu trưởng Trường Đại học Kinh tế - Kỹ thuật Công nghiệp - Hình thức thi kết thúc học phần: Thi thực hành 14. Cán bộ tham gia giảng dạy Là giáo viên cơ hữu, giáo viên kiêm nhiệm, giáo viên thỉnh giảng do Khoa, Bộ môn quản lý, phân công giảng dạy khi có đủ các điều kiện, tiêu chuẩn, được Hiệu trưởng duyệt. - Giảng lý thuyết Giảng viên có học vị từ Thạc sỹ trở lên, có kinh nghiệm trong giảng dạy hoặc hướng dẫn thảo luận, được Bộ môn phân công. - Hướng dẫn làm bài tập, bài tập lớn, thảo luận, thực hành môn học, thí nghiệm, tiểu luận. Là giảng viên, giáo viên có học vị từ Cử nhân trở lên, có kinh nghiệm trong giảng dạy hoặc hướng dẫn thảo luận, được Bộ môn phân công. Đề cương chi tiết này đã được thông qua bộ môn làm cơ sở giảng dạy cho các lớp hệ đại học của ngành Công nghệ thông tin. Hà Nội, ngày tháng năm 2011 Khoa Tổ bộ môn Người biên soạn ix
  11. Chương 1 TỔNG QUAN VỀ LẬP TRÌNH .NET MỤC TIÊU CỦA CHƯƠNG - Về kiến thức Giới thiệu các khái niệm cơ bản và cấu trúc của .Net Framework, đồng thời thông qua việc trình bày một ứng dụng để giới thiệu về Visual Studio .Net. - Về thái độ: Giúp sinh viên chú ý và tiếp nhận ngôn ngữ lập trình Visual Basic.NET như một công cụ lập trình hiện đại và được ứng dụng nhiều trong thực tế. - Về kỹ năng Sau khi kết thúc bài học sinh viên có thể cài đặt phần mềm Visual Studio 2005 và chạy được các chương trình 1.4.2; 1.4.3; 1.4.4. NỘI DUNG BÀI GIẢNG LÝ THUYẾT 1.1 Visual Studio.NET và .NET Framework 1.1.1 Giới thiệu Trong thời đại công nghệ thông tin, dữ liệu trở nên quan trọng đến nỗi người ta mong muốn tất cả mọi thứ như điện thoại di động, máy tính xách tay, các máy PDA (Personal Digital Assistant) đều phải kết nối với nhau để chia sẽ dữ liệu và việc sử dụng các phần mềm để quản lý, sử dụng những dữ liệu đó là "không biên giới". Ứng dụng phải sẵn sàng để sử dụng từ trên máy tính cũng như trên điện thoại di động 24/24 giờ, ít lỗi, xử lý nhanh và bảo mật chặt chẽ. Các yêu cầu này làm đau đầu những chuyên gia phát triển ứng dụng khi phần mềm chủ yếu viết cho hệ thống này không chạy trên một hệ thống khác bởi nhiều lý do như khác biệt về hệ điều hành, khác biệt về chuẩn giao tiếp dữ liệu, mạng. Thời gian và chi phí càng trở nên quý báu vì bạn không phải là người duy nhất biết lập trình. Làm sao sử dụng lại những ứng dụng đã viết để mở rộng thêm nhưng vẫn tương thích với những kỹ thuật mới? Sun Microsystems đi đầu trong việc cung cấp giải pháp với Java. Java chạy ổn định trên các hệ điều hành Unix hay Solaris của Sun từ máy chủ tới các thiết bị cầm tay hay thậm chí trên các hệ điều hành Windows của Microsoft (một ví dụ rõ ràng đó là hầu hết các điện thoại di động thế hệ mới đều có phần mềm viết bằng Java). Kiến trúc lập trình dựa trên Java bytecode và thi hành trên máy ảo Java (JVM – Java Virtual Marchine) cho phép các ứng dụng Java chạy trên bất cứ hệ điều hành nào. Mô hình lập trình thuần hướng đối tượng của Java giúp các lập trình viên tùy ý sử dụng lại và mở rộng các đối tượng có sẵn. Các nhà cung cấp công cụ lập trình dựa vào đây đểø 1
  12. gắn vào các môi trường phát triển ứng dụng bằng Java của mình đủ các thư viện lập trình nhằm hỗ trợ các lập trình viên. Sức mạnh của Java dường như quá lớn đến nỗi Microsoft từng phải chống trả bằng cách loại bỏ Java Virtual Marchine khỏi các phiên bản hệ điều hành Windows mới của mình như Windows XP. Tuy nhiên, Microsoft thừa hiểu rằng dù không cung cấp JVM, Sun cũng có thể tự cung cấp các JVM package cho những người dùng Windows. Đó là lý do tại sao nhà khổng lồ quyết định bắt tay xây dựng lại từ đầu một nền tảng phát triển ứng dụng mới: Microsoft.NET Framework. Hiểu một cách đơn giản thì .NET Framework là bộ thư viện dành cho các lập trình viên .NET. Framework chính là một tập hợp hay thư viện các lớp đối tượng hỗ trợ người lập trình khi xây dựng ứng dụng. Bộ thư viện của .NET Framework bao gồm hơn 5000 lớp đối tượng đủ sức hỗ trợ hầu hết các yêu cầu từ phía lập trình viên. Công nghệ mã nguồn mở được đưa vào .NET và trong .NET, mọi thành phần đều có thể kế thừa và mở rộng. Ngày 13/02/2002, Microsoft chính thức giới thiệu bộ công cụ lập trình mới của mình – Visual Studio.NET dựa trên công nghệ Microsoft .NET. Đó là một môi trường phát triển ứng dụng sử dụng giao diện đồ hoạ, tích hợp nhiều chức năng, tiện ích khác nhau để hỗ trợ tối đa cho các lập trình viên. .NET Framework là thành phần quan trọng nhất trong kỹ thuật phát triển ứng dụng dựa trên .NET. Visual Studio sẽ giúp người lập trình nắm bắt và tận dụng tốt hơn những chức năng của .NET Framework. 1.1.2 Cấu trúc .NET Framework 2
  13. Common language Specification: Vai trò của thành phần này là đảm bảo sự tương tác giữa các đối tượng bất chấp chúng được xây dựng trong ngôn ngữ nào, miễn là chúng cung cấp được những thành phần chung của các ngôn ngữ muốn tương tác ASP.NET Bộ thư viện các lớp đối tượng dùng trong việc xây dựng các ứng dụng Web. Ứng dụng web xây dựng bằng ASP.NET tận dụng được toàn bộ khả năng của .NET Framework. Bên cạnh đó là một "phong cách" lập trình mới mà Microsoft đặt cho nó một tên gọi rất kêu : code behind. Đây là cách mà lập trình viên xây dựng các ứng dụng Windows based thường sử dụng – giao diện và lệnh được tách riêng. Web services có thể hiểu khá sát nghĩa là các dịch vụ được cung cấp qua Web (hay Internet). Dịch vụ được coi là Web service không nhằm vào người dùng mà nhằm vào người xây dựng phần mềm. Web service có thể dùng để cung cấp các dữ liệu hay một chức năng tính toán. Ví dụ, công ty du lịch của bạn đang sử dụng một hệ thống phần mềm để ghi nhận thông tin về khách du lịch đăng ký đi các tour. Để thực hiện việc đặt phòng khách sạn tại địa điểm du lịch, công ty cần biết thông tin về phòng trống tại các khách sạn. Khách sạn có thể cung cấp một Web service để cho biết thông tin về các phòng trống tại một thời điểm. Dựa vào đó, phần mềm của bạn sẽ biết rằng liệu có đủ chỗ để đặt phòng cho khách du lịch không? Nếu đủ, phần mềm lại có thể dùng một Web service khác cung cấp chức năng đặt phòng để thuê khách sạn. Điểm lợi của Web service ở đây là bạn không cần một người làm việc liên lạc với khách sạn để hỏi thông tin phòng, sau đó, với đủ các thông tin về nhiều loại phòng người đó sẽ xác định loại phòng nào cần đặt, số lượng đặt bao nhiêu, đủ hay không đủ rồi lại liên lạc lại với khách sạn để đặt phòng. Đừng quên là khách sạn lúc này cũng cần có người để làm việc với nhân viên của bạn và chưa chắc họ có thể liên lạc thành công. Web service được cung cấp dựa vào ASP.NET và sự hỗ trợ từ phía hệ điều hành của Internet Information Server. Windows Form Bộ thư viện về Window form gồm các lớp đối tượng dành cho việc xây dựng các ứng dụng Windows based. ADO.NET and XML Bộ thư viện này gồm các lớp dùng để xử lý dữ liệu. ADO.NET thay thế ADO để trong việc thao tác với các dữ liệu thông thường. Các lớp đối tượng XML được cung cấp để bạn xử lý các dữ liệu theo định dạng mới: XML. Các ví dụ cho bộ thư viện này là SqlDataAdapter, SqlCommand, DataSet, XMLReader, XMLWriter, 3
  14. Base Class Library Đây là thư viện các lớp cơ bản nhất, được dùng trong khi lập trình hay bản thân những người xây dựng .NET Framework cũng phải dùng nó để xây dựng các lớp cao hơn. Ví dụ các lớp trong thư viện này là String, Integer, Exception, Common Language Runtime Là thành phần "kết nối" giữa các phần khác trong .NET Framework với hệ điều hành. Common Language Runtime (CLR) giữ vai trò quản lý việc thi hành các ứng dụng viết bằng .NET trên Windows. CLR sẽ thông dịch các lời gọi từ chương trình cho Windows thi hành, đảm bảo ứng dụng không chiếm dụng và sử dụng tràn lan tài nguyên của hệ thống. Nó cũng không cho phép các lệnh "nguy hiểm" được thi hành. Các chức năng này được thực thi bởi các thành phần bên trong CLR như Class loader, Just In Time compiler, Garbage collector, Exception handler, COM marshaller, Security engine, Trong các phiên bản hệ điều hành Windows mới như XP.NET và Windows 2003, CLR được gắn kèm với hệ điều hành. Điều này đảm bảo ứng dụng viết ra trên máy tính của chúng ta sẽ chạy trên máy tính khác mà không cần cài đặt, các bước thực hiện chỉ đơn giản là một lệnh copy của DOS! Operating System .NET Framework cần được cài đặt và sử dụng trên một hệ điều hành. Hiện tại, .NET Framework chỉ có khả năng làm việc trên các hệ điều hành Microsoft Win32 và Win64 mà thôi. Trong thời gian tới, Microsoft sẽ đưa hệ thống này lên Windows CE cho các thiết bị cầm tay và có thể mở rộng cho các hệ điều hành khác như Unix. Với vai trò quản lý việc xây dựng và thi hành ứng dụng, .NET Framework cung cấp các lớp đối tượng (Class) để NLT có thể gọi thi hành các chức năng mà đối tượng đó cung cấp. Tuy nhiên, lời gọi này có được "hưởng ứng" hay không còn tùy thuộc vào khả năng của hệ điều hành đang chạy ứng dụng. Các chức năng đơn giản như hiển thị một hộp thông báo (Messagebox) sẽ được .NET Framework sử dụng các hàm API của Windows. Chức năng phức tạp hơn như sử dụng các COMponent sẽ yêu cầu Windows phải cài đặt Microsoft Transaction Server (MTS) hay các chức năng trên Web cần Windows phải cài đặt Internet Information Server (IIS). Như vậy, việc lựa chọn một hệ điều hành để cài đặt và sử dụng .NET Framework cũng không kém phần quan trọng. Cài đặt .NET Framework trên các hệ điều hành Windows 2000, 2000 Server, XP, XP.NET, 2003 Server sẽ đơn giản và tiện dụng hơn trong khi lập trình. 4
  15. 1.1.3 Một số đặc trưng của Visual Studio .NET Điểm đặc trưng của Microsoft Visual Studio là tất cả các ngôn ngữ lập trình trong .NET Framework đều có chung một IDE (Integrated Development Environment), trình gỡ lỗi, trình duyệt project và solution, class view, cửa sổ thuộc tính, hộp công cụ, menu và toolbar. Ngoài ra còn phải kể đến một số các đặc trưng sau 1. Từ khóa và cú pháp lệnh được tô sáng. 2. Tự động hoàn thành các cú pháp lệnh khi người lập trình đánh dấu chấm với objects, namespace, enum và khi sử dụng từ khóa New. 3. Trình duyệt project, solution cho phép quản lý các ứng dụng chứa nhiều file với khuôn dạng khác nhau. 4. Cho phép người sử dụng xây dựng giao diện chỉ với thao tác kéo và thả trên form. 5. Cửa sổ thuộc tính cho phép thiết lập các giá trị cho các thuộc tính khác nhau của các điều khiển trên form hoặc trên trang web. 6. Trình gỡ rối cho phép gỡ lỗi của chương trình bằng cách thiết lập các điểm break point khi theo dõi quá trình hoạt động của chương trình. 7. Trình biên dịch trực tiếp (Hot compiler) cho phép kiểm tra cú pháp của dòng mã lệnh và thông báo các lỗi được phát hiện ngay khi người sử dụng nhập dòng lệnh vào từ bàn phím. 8. Người sử dụng được trợ giúp bằng trình Dynamic Help sử dụng MSDN (Microsoft Development Network library). 9. Biên dịch và xây dựng các ứng dụngCompilating and building applications. 10. Cho phép thi hành ứng dụng có/ không bộ gỡ rối (debugger). 11. Triển khai ứng dụng .NET của người sử dụng trên Internet hoặc CD. Project và Solutions Một Project là sự kết hợp của các file thực thi chương trình và file thư viện để tạo nên một ứng dụng hoặc một mô đun. Thông tin về project thường được lưu trữ trong các file có phần mở rộng là .vbproj (VB.NET) hoặc csproj (C#). Có thể kể đến một số loại project trong Visual Studio .NET như Console, Windows Application, ASP.NET, Class Librraries, Trái lại, một solution thường là sự kết hợp nhiều dự án khác nhau để tạo thành một số ứng dụng. Ví dụ trong một solution có thể bao gồm một project là ASP.NET WEB Application và một Windows Form project. Thông tin của một solution được lưu trữ trong các file .sln và được quản lý nhờ Visual Studio.NET Solution Explorer. 5
  16. Toolbox, Properties và Class View Tabs Tất cả các ngôn ngữ lập trình trong bộ Visual Studio .NET đều dùng chung một bộ công cụ (toolbox). Bộ công cụ này (thường xuất hiện bên tay trái màn hình) chứa một số các điều khiển chung cho các ứng dụng windows, web và dữ liệu như texbox, checkbox, tree view, list box, menus, file open dialog Properties Tab - cửa sổ thuộc tính (thường xuất hiện bên tay phải) cho phép thiết lập các thuộc tính cho form và điều khiển tại thời điểm thiết kế mà không cần viết code. 1.2 Cài đặt phần mềm Visual Studio 2005 Microsoft Visual Studio 2005 là một bộ sản phẩm cung cấp 3 ngôn ngữ lập trình Visual Basic.NET (VB.NET), C# (C Sharp), Visual C++.NET và Visual J#.NET. Thêm vào đó là Integrated Development Environment (IDE) giúp lập trình dễ đàng, thoải mái. IDE không những cung cấp mọi công cu lập trình cần thiết mà còn giúp kiểm tra nguồn mã hay tạo giao diện Windows trực quan, truy tìm các tập tin liên hệ đến dự án và nhiều thứ khác nữa. 1.2.1 Yêu cầu phần cứng 1.2.2 Cài đặt: Microsoft Visual Studio 2005 thường gồm 4 đĩa CD. Trước khi cài đặt bạn phải chạy các file trên 3 đĩa để giải nén vào một thư mục trên đĩa cứng. Sau khi giải nén xong, xong sẽ có hai thư mục chính: thư mục VS (chứa các file cài Visual Studio .Net 1.17GB) và thư mục MSDN (chứa các thư viện hỗ trợ việc sử dụng Visual Studio.NET 1.55GB). Để cài đặt, ta chạy file Setup.exe trong thư mục VS sau đó chọn chức năng Install Visual Studio 2005. 6
  17. - Hộp thoại dưới đây sẽ xuất hiện trên màn hình: 7
  18. - Click chọn “Next”. Xuất hiện cửa sổ yêu cầu đăng ký - Đăng ký bằng cách lựa chọn click chuột vào “I accept the term of the License Agreement”. Sau đó click chọn “Next” để sang trang tiếp theo. 8
  19. - Chọn kiểu cài đặt Default (ngầm định) hay Full (đầy đủ) hay Custom (tự thiết lập các thông số); sau đó click vào nút Install và làm theo các hướng dẫn trên màn hình. Quá trình cài đặt sẽ yêu cầu bạn khởi động lại máy trước khi kết thúc. 9
  20. Tùy theo cấu hình từng máy mà thời gian cài đặt có thể mất từ 25-35 phút. 1.3 Visual Basic.NET 1.3.1 Các phương pháp lập trình trong VB.NET Phương pháp lập trình hướng lệnh Trong phương pháp này người ta xem chương trình là tập hợp các lệnh. Khi đó việc viết chương trình là xác định xem chương trình gồm những lệnh nào, thứ tự thực hiện của chúng ra sao. Phương pháp lập trình hướng thủ tục Trong phương pháp này chương trình được xem là một hệ thống các thủ tục (sub và function). Trong đó, mỗi thủ tục là một dãy các lệnh được sắp thứ tự. Khi đó, việc viết chương trình là xác định xem chương trình gồm các thủ tục nào, mối quan hệ giữa chúng ra sao? Phương pháp lập trình hướng đơn thể Trong phương pháp này chương trình được xem là một hệ thống các đơn thể, mỗi đơn thể là một hệ thống các thủ tục và hàm. Khi đó, việc viết chương trình là 10
  21. xác định xem chương trình gồm những đơn thể nào? Đơn thể nào đã có sẵn, đơn thể nào phải đi mua, đơn thể nào phải tự viết. Trong VB.NET đơn thể được xem là một trong các cấu trúc Module, Class, Structure. Phương pháp lập trình hướng đối tượng Trong phương pháp này người ta xem chương trình là một hệ thống các đối tượng, mỗi một đối tượng là sự bao bọc bên trong nó 2 thành phần: - Dữ liệu: là các thông tin về chính đối tượng. Trong một số sách, thành phần này còn được gọi là thành phần thuộc tính, thông tin . - Hành động: là các khả năng mà đối tượng có thể thực hiện. Thành phần này còn có các tên như sau: phương thức, hàm thành phần, hành vi. Mỗi một đối tượng sẽ được cài đặt trong chương trình với dạng đơn thể chứa dữ liệu. Thêm vào đó tính chất kế thừa cho phép chúng ta xây dựng đối tượng mới dựa trên cơ sở đối tượng đã có. 1.3.2 Visual Basic.NET Nhiều lập trình viên đã quen với ngôn ngữ lập trình Visual Basic do Microsoft phát triển dựa trên ngôn ngữ BASIC từ năm 1964. Từ khi ra đời đến nay, Visual Basic đã phát triển qua nhiều thế hệ và kết thúc ở phiên bản VB 6.0 với rất nhiều modules, công cụ hay ứng dụng được bổ sung vào và đặc biệt là phương pháp kết nối với cơ sở dữ liệu qua sự kết hợp của ADO (Active Data Object). Tuy nhiên một trong những nhược điểm của VB 6.0 là không cung ứng tất cả các đặc trưng của một ngôn ngữ lập trình hướng đối tượng (Object Oriented Language - OOL) như các ngôn ngữ C++ hay Java. Thay vì cải thiện hay vá víu thêm thắt vào VB 6.0, Microsoft đã xóa bỏ tất cả để làm lại từ đầu các ngôn ngữ lập trình hướng đối tượng rất hùng mạnh. Đó là các ngôn ngữ lập trình Visual Basic .NET và C# (C Sharp). Có thể nói Visual Basic.NET (VB.NET) là một ngôn ngữ lập trình hướng đối tượng do Microsoft thiết kế lại từ con số 0. VB.NET không kế thừa hay bổ sung, phát triển từ VB 6.0 mà nó là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft .NET FrameWork. VB.NET hỗ trợ đầy đủ các đặc trưng của một ngôn ngữ hướng đối tượng như là trừu tượng, bao đóng, kế thừa, đa hình, đa luồng và cấu trúc xử lý các exception. VB.NET là một ngôn ngữ lập trình cho phép người sử dụng thiết lập các ứng dụng theo 3 loại: - Ứng dụng Console là các chương trình chạy trên hệ điều hành MS-DOS thông qua trình biên dịch Visual Studio 2005 Command Prompt. 11
  22. - Ứng dụng Windows Form là các ứng dụng chạy trên hệ điều hành Windows với các biểu mẫu (form) và các điều khiển (button, texbox, label, ) - Ứng dụng ASP.NET gồm WEB Form và WEB Services. 1.3.3 Ví dụ 1 - Hello, World Chương trình dưới đây là một ví dụ về console-application. Bạn có thể biên soạn chương trình này bằng bất kỳ phần mềm soạn thảo nào, ví dụ Notepad và lưu thành một file có phần mở rộng là vb chẳng hạn Hello.vb. Imports System Public Module Hello Public Sub Main( ) Console.WriteLine("Hello, World") End Sub End Module Để biên dịch chương trình, sử dụng tính năng Visual Studio 2005 Command Prompt và đánh lệnh sau vào cửa sổ: vbc Hello.vb File Hello.vb sẽ được biên dịch thành file Hello.exe và khi muốn chạy chương trình, bạn chỉ việc gõ lệnh hello tại cửa sổ lệnh. Dòng chữ Hello, World sẽ xuất hiện trên màn hình. Ví dụ 1.3.3 thể hiện một cấu trúc đơn giản nhất của chương trình VB.NET. Cấu trúc này gồm một đơn thể duy nhất là mô đun và trong mô đun này sẽ chứa thủ tục main và các hàm, các thủ tục cần thiết khác. Namespace Dòng đầu tiên của chương trình chỉ ra rằng chương trình sẽ sử dụng một trong những kiểu được định nghĩa của không gian tên (Namespace) System. Namespace là tên gọi một nhóm các lớp đối tượng phục vụ cho một mục đích nào đó. Chẳng hạn, các lớp đối tượng xử lý dữ liệu sẽ đặt trong một namespace tên là Data. Các lớp đối tượng dành cho việc vẽ hay hiển thị chữ đặt trong namespace tên là Drawing. Một namespace có thể là con của một namespace lớn hơn. Namespace lớn nhất trong .NET Framework là System. 12
  23. Lợi điểm của Namespace là phân nhóm các lớp đối tượng, giúp người dùng dễ nhận biết và sử dụng. Ngoài ra, Namespace tránh việc các lớp đối tượng có tên trùng với nhau không sử dụng được. .NET. Framework cho phép chúng ta tạo ra các lớp đối tượng và các Namespace của riêng mình. Từ khóa Imports Mục đích của lệnh Imports là để đưa không gian tên vào trong chương trình để việc khai báo và tạo các lớp trong không gian tên ngắn gọn hơn. Cú pháp: Imports [ = ] [. ] Trong đó - là một chuỗi được đặt tùy ý, là tên tắt của được sử dụng trong tham chiếu trên Module, Class. Nếu lệnh Imports không có phần bí danh, các thành phần định nghĩa trong không gian tên có thể được truy cập mà không cần chỉ rõ. Nếu có bí danh, bí danh phải được sử dụng trong phần truy cập. - : bắt buộc. - : tùy chọn, tên của một thành phần đã được khai báo trong không gian tên. 13
  24. Ví dụ - Imports System cho phép ta truy cập và sử dụng các lớp trong namespace có tên System. Trong ví dụ 1.3.3 dòng lệnh này cho phép truy cập vào lớp Console từ Main() sub. - Imports System.Collections cho phép sử dụng các lớp được định nghĩa trong namespace Collection là một thành phần của namespace System. Chú ý Mỗi lệnh Imports chỉ được sử dụng với một không gian tên. Mỗi Module có thể có nhiều dòng Imports Các lệnh Imports phải được đặt trước tất cả các khai báo, kể cả lệnh khai báo Module hoặc Class. Sau lệnh Imports, các thành phần được tham chiếu không cần phải chỉ ra nội dung phần Imports. Không được phép định nghĩa một thành phần ở cấp Module cùng tên với bí danh đã đặt Module Một chương trình VB.NET có thể chứa một hoặc nhiều module. Modules trong VB.NET là sự kết hợp của các dữ liệu chung (fields) và các hàm dùng chung (method). Tất cả các thành phần được khai báo trong một module như field, method, properties đều là dùng chung và có thể được sử dụng tại bất kỳ một dòng code nào trong projects. Module trong VB.Net được định nghĩa bằng cách sử dụng từ khóa Module đi kèm với tên Module và kết thúc bằng câu lệnh End Module. Module Hello End Module Main() Sub Dòng tiếp theo của chương trình 1.3.2 định nghĩa thủ tục Main() với cấu trúc như sau: Sub Main() End Sub Một chương trình VB.NET có thể bao gồm một hoặc nhiều thủ tục. Thủ tục Main() sub có nghĩa là chương trình sẽ bắt đầu thực thi từ dòng lệnh đầu tiên của thủ tục Main() và sẽ kết thúc khi kết thúc các lệnh trong Main(). 14
  25. Dòng thông báo Trong ứng dụng Console, để hiển thị một dòng thông báo ta dùng cú pháp lệnh: Console.WriteLine(chuỗi_thông_báo) 1.3.4 Ví dụ 2 - Hello, Windows Dưới đây là một ví dụ về phiên bản GUI (Graphical User Interface) của Hello, World. Imports System Imports System.Drawing Imports System.Windows.Forms Public Class HelloWindows Inherits Form Private lblHelloWindows As Label Public Shared Sub Main( ) Application.Run(New HelloWindows( )) End Sub Public Sub New( ) lblHelloWindows = New Label( ) With lblHelloWindows .Location = New Point(37, 31) .Size = New Size(392, 64) .Font = New Font("Arial", 36) .Text = "Hello, Windows!" .TabIndex = 0 .TextAlign = ContentAlignment.TopCenter End With Me.Text = "Programming Visual Basic .NET" AutoScaleBaseSize = New Size(5, 13) FormBorderStyle = FormBorderStyle.FixedSingle ClientSize = New Size(466, 127) Controls.Add(lblHelloWindows) End Sub End Class Hai lệnh Imports ở đầu chương trình chỉ ra rằng chương trình sẽ sử dụng các đối tượng và phương thức có sẵn trong không gian tên Drawing và Windows.Forms. Từ khóa Inherits cho thấy lớp HelloWindows thừa kế lớp Form là một lớp đã được thiết kế sẵn trong Namespace Windows.Forms. Thủ tục New định nghĩa các thuộc tính trên form HelloWindows và định nghĩa một điều khiển label trên form. 15
  26. Để biên dịch chương trình này chúng ta sử dụng câu lệnh: vbc HelloWindows.vb /reference:System.dll,System.Drawing.dll, System.Windows.Forms.dll / target:winexe Tham số reference chỉ ra rằng có 3 dll cần sử dụng để biên dịch chương trình. Target cho biết file output được biên dịch theo dạng nào. Có 3 kiểu biên dịch gồm exe cho các ứng dụng console, winexe cho các ứng dụng windows GUI và library để biên dịch một class library (*.dll). Kết quả thực hiện chương trình Hello Windows được thể hiện ở hình sau: 1.3.5 Ví dụ 3 - Hello, Browser Hello, Browser là một phiên bản WEB của Hello, World: Sub Page_Load(Sender As Object, E As EventArgs) lblMsg.Text = "Hello, Browser!" End Sub Sub btnBlack_Click(Sender As Object, E As EventArgs) lblMsg.ForeColor = System.Drawing.Color.Black End Sub Sub btnGreen_Click(Sender As Object, E As EventArgs) lblMsg.ForeColor = System.Drawing.Color.Green End Sub Sub btnBlue_Click(Sender As Object, E As EventArgs) lblMsg.ForeColor = System.Drawing.Color.Blue End Sub Programming Visual Basic .NET 16
  27. Đoạn chương trình này được ghi lại thành file HelloBrowser.aspx. Output của chương trình này được thể hiện trong hình dưới đây: TÓM TẮT NỘI DUNG CỐT LÕI 1. Cấu trúc .NET Frame Work 2. Cài đặt Microsoft Visual Studio 2005 3. Một số khái niệm: - Solution và projects - Namespace - Module 17
  28. Chương 2 NGÔN NGỮ LẬP TRÌNH VISUAL BASIC .NET MỤC TIÊU CỦA CHƯƠNG - Về kiến thức Giới thiệu các kiểu dữ liệu cơ bản và kiểu dữ liệu có cấu trúc, cách khai báo và sử dụng các biến, cách viết và sử dụng các lệnh trong VB.NET. - Về thái độ: Giúp sinh viên hệ thống và củng cố lại các khái niệm chính trong lập trình hướng lệnh như nhập xuất dữ liệu, hoạt động của các cấu trúc rẽ nhánh và cấu trúc lặp. - Về kỹ năng Sau khi kết thúc bài học sinh viên giải được các ví dụ trong phần bài tập bằng cách viết các đoạn chương trình và xây dựng các thủ tục, hàm bằng ngôn ngữ VB.NET. NỘI DUNG BÀI GIẢNG LÝ THUYẾT 2.1 Các kiểu dữ liệu và đặc điểm 2.1.1 Các kiểu dữ liệu Các kiểu dữ liệu của .Net được mô tả chi tiết trong một cấu trúc gọi là Common Type System (CTS). CTS định nghĩa các kiểu dữ liệu, cách thức sử dụng, cách thức được quản lý lúc thực thi và cùng với Common Language Specification đóng một vai trò quan trọng trong việc trao đổi giữa các ngôn ngữ lập trình trong .Net. Common Type System có chức năng: Thiết lập một nền tảng cho phép tương tác giữa các ngôn ngữ lập trình, bảo toàn giá trị của dữ liệu khi có sự trao đổi dữ liệu giữa các ngôn ngữ và bảo đảm việc thực hiện câu lệnh được tối ưu Cung cấp một mô hình hướng đối tượng cho các ngôn ngữ lập trình. Đưa ra những quy tắc để các ngôn ngữ lập trình phải tuân thủ nhằm bảo đảm các thành phần viết trên các ngôn ngữ khác nhau có thể tương tác với nhau. Các kiểu dữ liệu trong VB.NET được chia thành 2 loại chính đó là 1. Value type (data types, Structure and Enumeration) 2. Reference Type (objects, delegates) Bảng 2-1 mô tả các loại dữ liệu thuộc kiểu value type. 18
  29. Kiểu dữ Kiểu dữ Kích Mô tả liệu trong liệu tương cỡ VB.NET ứng trong .NET Boolean Boolean 1 Biểu diễn giá trị lôgic True hoặc False Char Char 2 Biểu diễn một ký tự Unicode (giá trị từ 0 đến 65535 không dấu) String String 0 đến khoảng 2 tỷ ký tự Unicode (Class) DateTime DateTime 8 0:00:00 ngày 01 tháng Giêng 0001 đến 23:59:59 ngày 31 tháng Mười Hai 9999. Số nguyên Byte Byte 1 0 đến 255 Integer Int32 2 Từ -2 147 483 648 đến 2 147 483 647 Long Int64 4 Từ -9 223 372 036 854 775 808 đến 9 223 372 036 854 775 807 Short Int16 8 -32 768 to 32 767 Số thực Decimal Decimal 12 Biểu diễn giá trị từ 1.0 × 10-28 đến 7.9 × 1028 với độ chính xác 28-29 chữ số thập phân. Double Double 8 Biểu diễn giá trị từ ±5.0 × 10-324 to ±1.7 × 10308 với độ chính xác 15-16 chữ số thập phân Single Single 4 Biểu diễn giá trị từ ±1.5 × 10-45 đến ±3.4 × 1038 với độ chính xác 7 chữ số thập phân Bảng 2-1 Các kiểu dữ liệu cơ bản trong VB.NET 2.1.2 Đặc điểm của các kiểu dữ liệu 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 bao gồm 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. 19
  30. 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 a. Kiểu String Thuộc tính Tên 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 Tên 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ề: -1 khi chuỗi thứ 1 nhỏ hơn chuỗi thứ 2 0 khi chuỗi thứ 1 bằng chuỗi thứ 1 1 khi chuỗi thứ 1 lớn hơn chuỗi thứ 2 Ngoà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í 20
  31. Tên Mô tả 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. b. Kiểu DateTime Thuộc tính Tên 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). Phương thức 21
  32. Tên 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. 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 c. Kiểu Number Thuộc tính Tên Mô tả MaxValue Hiển thị giá trị lớn nhất của kiểu (chỉ đọc). 22
  33. 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 12345.67 ToString(“E”) hiển thị học. 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 250 ToString(“X”) hiển thị FA phân Bảng 2-2 Biểu thức định dạng 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 Biểu thức Ý nghĩa Ví dụ 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- Dấu hiển thị số khoa 12345678 ToString (“#.#######E+000”) 0,e+0, e-0 học hiển thị 1.2345678E+007 \ Ký tự literal 123456 ToString(“\# #,###”) hiển thị # 123,456 ; Ký tự ngăn Ký tự ngăn cách vùng Với ToString(“dương #,###;âm #,###; số cách vùng không”) -123456 hiển thị âm 123,456 23
  34. Biểu thức Ý nghĩa Ví dụ 0 hiển thị số không Bảng 2-3 Ký tự định dạng biểu thức 2.1.3 Biểu diễn các giá trị Bảng dưới đây mô tả cách biểu diễn các giá trị cụ thể theo các kiểu dữ liệu trong VB.NET Kiểu dữ Biểu diễn Ví dụ liệu Boolean True, False Dim bFlag As Boolean = False Char C Dim chVal As Char = "X"C Date # # Dim datMillen As Date = #01/01/2001# Decimal D Dim decValue As Decimal = 6.14D Double Bất kỳ một số viết kiểu dấu Dim dblValue As Double = 6.142 phẩy động nào hoặc R Dim dblValue As Double = 6.142R Integer Bất kỳ một số nguyên nào thuộc Dim iValue As Integer = 362 khoảng (-2,147,483,648 đến Dim iValue As Integer = 362I 2,147,483,647), hoặc I Dim iValue As Integer = &H16AI (hệ 16) Dim iValue As Integer = &O552I (hệ 8) Long Bất kỳ một số nguyên nào ngoài Dim lValue As Long = 362L khoảng Dim lValue As Long = &H16AL (hệ 16) (-9,223,372,036,854,775,808 Dim lValue As Long = &O552L (hệ 8) đến -2,147,483,649 hoặc ngoài khoảng từ 2,147,483,648 đến 9,223,372,036,854,775,807), hoặc L Short S Dim shValue As Short = 362S Dim shValue As Short = &H16AS (hệ 16) Dim shValue As Short = &O552S (hệ 8) Single F Dim sngValue As Single = 6.142F String " " Dim strValue As String = "This is a string" Bảng 2-4 Cách viết các giá trị theo từng kiểu dữ liệu 2.2 Biến, hằng 2.2.1 Biến và tính chất Biến là một thực thể với 6 tính chất sau: 24
  35. Name: Tên của biến. Tên của biến phải là định danh hợp lệ trong VB.Net, nghĩa là phải bắt đầu bằng một chữ cái hoặc ký tự _ và không được trùng với các từ khóa củaVB.Net. Trường hợp muốn dùng từ khóa làm tên biến phải được dùng trong ngoặc vuông như [String], [Boolean], Tên biến nên có ý nghĩa gợi nhớ đến nội dung trong nó như Don_gia, So_luong_xuat. Address: Địa chỉ vùng nhớ nơi lưu giữ giá trị của biến. Trong thời gian sống của chương trình, đị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. Mỗi biến phải thuộc về một kiểu dữ liệu trong Common Type System. Value: Giá trị. Giá trị của biến phải phù hợp với kiểu dữ liệu 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. Có các loại phạm vi sau: Cấp độ Mô tả Block Scope - Phạm vi khối lệnh Chỉ được nhìn nhận trong khối lệnh mà biến được khai báo Procedure Scope - Phạm vi thủ tục Cho phép truy cập tại bất kỳ một dòng lệnh nào bên trong thủ tục mà biến được khai báo Module Scope - Phạm vi Module Cho phép truy cập tại bất kỳ một dòng code nào trong module, class hoặc structure nơi biến được khai báo Namespace Scope - Phạm vi Namespace Cho phép truy cập tại bất kỳ một dòng code nào của namespace nơi biến được khai báo 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 khoảng thời gian biến có thể lưu giữ giá trị. Biến có phạm vi Module có thời gian tồn tại là thời gian ứng dụng đang thực hiện. Biến có phạm vi khối lệnh, thủ tục chỉ tồn tại trong khi thủ tục đang thực hiện. Biến này sẽ được khởi tạo theo giá trị mặc định của kiểu dữ liệu khi thủ tục bắt đầu thực hiện và chấm dứt khi thủ tục kết thúc. 2.2.2 Khai báo và khởi tạo giá trị cho biến Khai báo Trong VB.NET các biến được khai báo với cú pháp sau: 25
  36. Dim tên_biến AS kiểu_dữ_liệu Trong đó tên biến là một chuỗi được bắt đầu bởi một chữ cái, không chứa dấu cách và là duy nhất trong một phạm vi. - Ví dụ: Khai báo biến i thuộc kiểu integer Dim i 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 Khai báo và khởi tạo giá trị - 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. Khai báo biến sử dụng các ký tự hậu tố Có thể khai báo biến bằng cách thêm vào sau tên biến một ký tự (hậu tố) xác định kiểu dữ liệu của biến. Ví dụ: Dim x% tương ứng với lệnh khai báo Dim x As Integer Các ký tự hậu tố được chỉ ra trong bảng dưới đây: Kiểu dữ liệu Ký tự Ví dụ Decimal @ Dim decValue@ = 132.24 Double # Dim dblValue# = .0000001327 Integer % Dim iCount% = 100 Long & Dim lLimit& = 1000000 Single ! Dim sngValue! = 3.1417 String $ Dim strInput$ = "" Bảng 2-5 Các ký tự hậu tố xác định kiểu dữ liệu 2.2.3 Xác định phạm vi biến (tầm vực của biến) Phạm vi khối lệnh Trong VB.NET khối lệnh là tập hợp các câu lệnh thuộc về một trong các cấu trúc điều khiển sau: 26
  37. - Do Loop - For [Each] Next - If End If - Select End Select - SyncLock End SyncLock - Try End Try - While End While - With End With Một biến được khai báo trong khối lệnh sẽ có tầm vực khối lệnh nghĩa là nó chỉ được phép sử dụng trong khối lệnh này. Phạm vi thủ tục Có hai loại thủ tục trong VB.NET đó là sub và function. Các biến được khai báo trong thủ tục và nằm ngoài bất kỳ khối lệnh nào của thủ tục là các biến có phạm vi thủ tục. Chúng còn được gọi là các biến cục bộ. Phạm vi Module (phạm vi đơn thể) Biến được khai báo trong đơn thể và không nằm trong bất kỳ khối lệnh hay thủ tục nào của đơn thể là các biến có phạm vi đơn thể. Các biến có phạm vi đơn thể được khai báo bằng cách thay từ khóa Dim bằng từ khóa Private. Phạm vi Namespace Các biến có phạm vi đơn thể và được khai báo với từ khóa Public hoặc Friend được gọi là các biến có phạm vi Namespace. 2.2.4 Hằng và số ngẫu nhiên Hằng Hằng là đại lượng có giá trị không đổi trong một phạm vi nào đó. Trong VB.NET các hằng số được khai báo với từ khóa Const và phải được khởi tạo giá trị ngay khi khai báo. Cú pháp khai báo hằng: Const As = Ví dụ: Const Max as Interger=100 Số ngẫu nhiên - Sử dụng đối tượng Random để khai báo số ngẫu nhiên - Dùng phương thức Next của đối tượng Random để khai báo khoảng mà số ngẫu nhiên lấy ra 27
  38. Ví dụ: Dim rd As Random Set rd =New Random Dim rdSo As Integer rdSo = rd.Next (1,1000) 2.2.5 Chuyển đổi các kiểu dữ liệu Option Strict ON|OFF Khai báo Option Strict On|Off là một chỉ thị không cho phép các chuyển đổi kiểu làm mất dữ liệu. Nhưng chúng ta có thể thực hiện các chuyển đổi mở rộng như chuyển biến kiểu Integer sang kiểu Long. Ví dụ: Đoạn code sau không có lỗi vì kiểu integer có thể chuyển sang kiểu Long là một kiểu chuyển đổi mở rộng được gọi là implicit conversion. Dim a As Integer = 5 Dim b As Long = a Song khi đảo ngược lại kiểu dữ liệu của hai biến a và b như sau Dim a As Long = 5 Dim b As Integer = a Thì sẽ gây ra lỗi trường hợp Option Strict là ON. Cũng như vậy, khi khai báo này bật (On) sẽ không cho phép tự động chuyển đổi kiểu chuỗi sang kiểu số hay ngược lại. Thay vào đó ta phải sử dụng các hàm convert. Ví dụ khi Option Strict là ON, với hai biến x và y được khai báo như sau Dim x as string, y as integer Thì câu lệnh x=y sẽ gây ra lỗi cú pháp. Thay vào đó ta phải dùng lệnh x=CStr(y) hoặc x=y.ToString Các hàm chuyển đổi dữ liệu Ta có thể sử dụng các hàm trong bảng dưới đây để chuyển đổi giữa các kiểu dữ liệu. Kiểu chuyển đổi này được gọi là explicit conversion vì trong kiểu chuyển đổi này lập trình viên đã chỉ định rõ cần chuyển về kiểu dữ liệu nào. Hàm chuyển đổi Chuyển đối số về kiểu CBool Boolean CByte Byte CChar Char CDate Date CDbl Double 28
  39. Hàm chuyển đổi Chuyển đối số về kiểu CDec Decimal CInt Integer CLng Long CObj Object CSng Single CStr String Bảng 2-6 Các hàm chuyển đổi dữ liệu 2.3 Toán tử Toán tử là ký hiệu chỉ ra phép toán nào được thực hiện trên các toán hạng (có thể là một hoặc hai toán hạng) 2.3.1 Toán tử toán học Ký hiệu Mô tả + (cộng) - (trừ) * (nhân) / (chia) \ (chia lấy phần nguyên) Mod chia lấy phần dư của số nguyên ^ (lũy thừa) 2.3.2 Toán tử nối chuỗi Toán tử chỉ dành cho toán hạng kiểu String với hai toán tử là & (ampersand) và + (cộng). Kết quả là một trị String gồm các ký tự của toán hạng thứ nhất tiếp theo sau là các ký tự của toán hạng thứ hai. 2.3.3 Toán tử gán Ký hiệu Mô tả = Gán toán hạng thứ hai cho toán hạng thứ nhất += Cộng hoặc nối chuỗi toán hạng sau vào toán hạng đầu và gán kết quả cho toán hạng đầu -= Trừ toán hạng sau khỏi toán hạng đầu và gán hiệu cho toán hạng đầu *= Nhân hai toán hạng với nhau và gán tích cho toán hạng đầu /= Chia toán hạng đầu cho toán hạng sau và gán thương cho toán 29
  40. hạng đầu \= Thực hiện phép toán \ giữa toán hạng đầu và toán hạng sau và gán kết quả cho toán hạng đầu ^= Tính lũy thừa toán hạng đầu với số mũ là toán hạng sau và gán kết quả cho toán hạng đầu &= Nối chuỗi toán hạng sau vào toán hạng đầu và gán kết quả cho toán hạng đầu 2.3.4 Toán tử so sánh Ký hiệu Mô tả = Bằng >= Lớn hơn hoặc bằng Lớn hơn Khác TypeOf Is So sánh kiểu của biến kiểu tham chiếu thứ nhất có trùng kiểu trên toán hạng thứ hai, nếu trùng trả về True, ngược lại False Is Toán tử dành cho toán hạng kiểu tham chiếu, trả về True nếu hai toán hạng cùng tham chiếu đến một đối tượng, ngược lại là False) Like Toán tử dành cho toán hạng kiểu String, trả về True nếu toán hạng thứ nhất trùng với mẫu (pattern) của toán hạng thứ hai, ngược lại là False. 2.3.5 Toán tử luận lý và bitwise Toán tử luận lý trả về giá trị True, False Ký hiệu Mô tả Not Trả về giá trị ngược lại của toán hạng And Trả về True (1) khi và chỉ khi hai toán hạng cùng là True (1) AndAlso Trả về giá trị như And nhưng khi toán hạng thứ nhất là False (0) sẽ không kiểm tra toán hạng thứ hai và trả về False Or Trả về False (0) khi và chỉ khi hai toán hạng cùng là False (0) OrElse Trả về giá trị như Or nhưng khi toán hạng thứ nhất là True (1) sẽ không kiểm tra toán hạng thứ hai và trả về True (1) Xor Trả về True (1) khi và chỉ khi có 1 toán hạng là True (1) Not Trả về giá trị ngược lại của toán hạng 30
  41. 2.4 Các lệnh VB.NET 2.4.1 Chú thích và cách viết lệnh Thông thường, mỗi lệnh VB.NET được viết trên một dòng. Trình biên dịch sẽ coi ký hiệu xuống dòng cũng là ký hiệu kết thúc câu lệnh. Trong trường hợp muốn viết một câu lệnh trên nhiều dòng, trước khi xuống dòng cần bổ sung thêm ký tự gạch dưới. Ví dụ: Câu lệnh sau sẽ sinh ra lỗi Dim myName As String = "My name is Faraz Rasheed" Ta có thể sửa thành Dim myName As String = "My name is" & _ "Faraz Rasheed" Để viết thêm các chú thích trong chương trình, ta sử dụng dấu nháy đơn ở đầu dòng chú thích Để viết nhiều lệnh trên cùng một dòng ta sử dụng dấu hai chấm ngăn cách các câu lệnh. Ví dụ: Đoạn mã sau: X=1 Y=2 Có thể viết liền một dòng: X=1 : y=2 2.4.2 Nhập/xuất dữ liệu a. Nhập/xuất dữ liệu với Console - Xuất dữ liệu: Console.Write(value) - Nhập một ký tự Console.Read() - Nhập một dòng: Console.Readline() Ví dụ 2-1: Chương trình dưới đây sẽ nhập tên, điểm toán, điểm văn từ màn hình console sau đó hiển thị lại tên và điểm trung bình. Imports System Public Module Module1 Sub Main() Dim hoten as string 31
  42. Dim toan,van, diemtb as decimal Console.Write("Nhap ho ten:") HoTen = Console.ReadLine() Console.Write("Nhap diem toan:") Toan = Console.ReadLine() Console.Write("Nhap diem van:") Van = Console.ReadLine() DiemTB = (Toan+Van)/2 Console.WriteLine("Ho ten :" & HoTen) Console.WriteLine("Diem Trung Binh:" & DiemTB) End Sub End Module b. InputBox- Hộp nhập liệu InputBox là một hàm cho phép hiển thị một hộp thoại có chứa một thông báo và một textbox, chờ người sử dụng nhập vào một chuỗi hoặc nhấn một nút lệnh và sau đó trả lại chuỗi đã nhập trong textbox. Cú pháp: InputBox( Prompt,[Title],[DefaultResponse], [Xpos], [Ypos]) Trong đó - Prompt (tham số bắt buộc) là chuỗi thông báo hiển thị trong hộp thoại. Trường hợp thông báo trên nhiều dòng cần dùng biểu thức Chr(13)&Chr(10) để ngắt dòng. - Title (tham số tùy chọn) là tiêu đề của hộp thoại. Nếu không chỉ định thì tên của ứng dụng sẽ được dùng làm tiêu đề. - DefaultResponse (tham số tùy chọn) là chuỗi hiển thị trong textbox khi người sử dụng không nhập giá trị gì và nút ngầm định được đáp ứng. Nếu không chỉ định thì textbox bỏ trống - Xpos (tham số tùy chọn) là một giá trị số xác định khoảng cách giữa mép trái của hộp thoại với mép trái màn hình. Nếu không chỉ định thì hộp thoại do inputbox tạo ra sẽ được căn giữa màn hình theo chiều ngang. - Ypos (tham số tùy chọn) là một giá trị số xác định khoảng cách giữa mép trên của hộp thoại với đỉnh màn hình. Nếu không chỉ định thì hộp thoại do inputbox tạo ra sẽ được căn giữa màn hình theo chiều dọc. Ví dụ: Để nhập giá trị cho biến a chúng ta có thể sử dụng hàm InputBox a=InputBox("Nhập giá trị cho biến a") Hộp thoại hiển thị trên màn hình như sau: 32
  43. c. Hiển thị thông báo - Hàm Msgbox Msgbox là một hàm hiển thị một thông báo trong một hộp thoại, chờ người sử dụng chọn một nút lệnh và trả về giá trị nguyên tương ứng với nút lệnh được chọn. Cú pháp MsgBox(Prompt[,Buttons][,Title) Trong đó: - Prompt (bắt buộc) là chuỗi được hiển thị trong hộp thông báo, độ dài tối đa 1024 ký tự; có thể dùng Chr(13) & Chr(10) để ngắt dòng. - Buttons (tham số tùy chọn) là một biểu thức số tương ứng với tổng của tất cả các giá trị bao gồm số lượng và kiểu của các nút được hiển thị, biểu tượng trong hộp thông báo, nút bấm tùy chọn. Nếu tham số này được bỏ qua thì giá trị ngầm định là zero. Các giá trị quy ước dạng của hộp thông báo được hiển thị trong bảng dưới đây: Member Value Description OKOnly 0 Chỉ hiển thị nút OK OKCancel 1 Hiển thị nút OK và Cancel AbortRetryIgnore 2 Hiển thị nút Abort, Retry và Ignore YesNoCancel 3 Hiển thị nút Yes, No và Cancel YesNo 4 Hiển thị nút Yes và No RetryCancel 5 Hiển thị nút Retry và Cancel Critical 16 Hiển thị biểu tượng Question 32 Hiển thị biểu tượng Exclamation 48 Hiển thị biểu tượng Information 64 Hiển thị biểu tượng DefaultButton1 0 Nút bấm đầu tiên là ngầm định 33
  44. Member Value Description DefaultButton2 256 Nút bấm thứ hai là ngầm định DefaultButton3 512 Nút bấm thứ ba là ngầm định AplicationModal 0 Ứng dụng là modal có nghĩa là người sử dụng phải nhấn một nút trong hộp thông báo mới có thể tiếp tục làm việc với ứng dụng SystemModal 4096 System là modal. Mọi ứng dụng phải đợi cho đến khi người sử dụng đáp ứng hộp thông báo MsgboxSetForeground 65536 Chỉ định hộp thông báo như màu nền của window MsgBoxRight 524288 Text được căn phải MsgBoxRtlReading 1048576 Text xuất hiện theo thứ tự từ phải sang trái Bảng 2-6 Các giá trị xác định dạng hộp thoại Msgbox Nhóm thứ nhất có giá trị từ 0 đến 5 mô tả số lượng và kiểu của các button xuất hiện trong hộp thông báo. Nhóm thứ hai (16,32,48,64) mô tả kiểu của các icon. Nhóm thứ ba (0, 256, 512) xác định nút bấm nào là ngầm định. Nhóm thứ 4 (0,4096) xác định kiểu đáp ứng của hộp thông báo và nhóm thứ 5 chỉ định màu cũng như kiểu căn lề của dòng text trong hộp thông báo. - Title (tham số tùy chọn) là tiêu đề của hộp thông báo. Nếu bỏ qua tham số này thì tên của ứng dụng sẽ được dùng làm tiêu đề. - Giá trị trả về Hằng số Giá trị OK 1 Cancel 2 Abort 3 Retry 4 Ignore 5 Yes 6 No 7 34
  45. Ví dụ: Để hiển thị hộp thông báo như dưới đây (gồm hai nút Yes, No và icon Question) ta sử dụng lệnh MsgBox("Bạn có chấp nhận xóa không", 36) Trong đó 36 là tổng của 4 (nút YesNo) và 32 (biểu tượng Question). Muốn lấy giá trị trả về tương ứng với nút người sử dụng đã bấm ta sử dụng lệnh X=MsgBox("Bạn có chấp nhận xóa không", 36) Khi đó nếu người sử dụng nhấn nút Yes ta sẽ có giá trị của x bằng 6; nếu nhấn nút No ta có giá trị của x bằng 7 d. Hiển thị thông báo - MessageBox.Show Ngoài hàm msgbox, ta có thể sử dụng phương thức Show của lớp MessageBox để hiển thị một hộp thông báo với cú pháp như sau: MessageBox.Show(text,caption,button,icon,defaultButton ,option,displayHelpButton) Trong đó: - Text: String là nội dung dòng thông báo - Caption: String là tiêu đề của hộp thoại. Nếu không chỉ định thì tiêu đề sẽ là tên của ứng dụng. - Button: xác định các nút được hiển thị trong hộp thông báo và thuộc về một trong các giá trị sau: + MessageBoxButtons.AbortRetryIgnore + MessageBoxButtons.OK + MessageBoxButtons.OKCancel + MessageBoxButtons.RetryCancel + MessageBoxButtons.YesNo + MessageBoxButtons.YesNoCancel - Icon: Biểu tượng xuất hiện trong hộp thoại; nhận một trong các giá trị sau: + MessageBoxIcon.Asterisk + MessageBoxIcon.Error 35
  46. + MessageBoxIcon.Exclamation + MessageBoxIcon.Hand + MessageBoxIcon.Information + MessageBoxIcon.None + MessageBoxIcon.Question + MessageBoxIcon.Stop + MessageBoxIcon.Warning - Default button: Nút bấm ngầm định nhận 1 trong 3 giá trị Button1, Button2, Button3 - Option: kiểu căn lề của hộp thoại - DisplayHelpButton (True,False) cho phép hiển thị hay không hiển thị nút Help. Ví dụ: Lệnh MessageBox.Show("Xóa bản ghi hiện thời?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) Sẽ hiển thị hộp thông báo dưới đây 2.4.3 Các lệnh rẽ nhánh a. Lệnh If Mẫu 1: If Then ' Các câu lệnh End if Trong đó có thể là biểu thức trả về giá trị True/False hoặc là một giá trị số. Giá trị số khác 0 tương ứng với True, ngược lại là False. Sử dụng cú pháp này, người lập trình muốn khai báo với trình biên dịch rằng các câu lệnh trong vùng If End If chỉ được thực hiện nếu như là đúng. Nếu chỉ có một lệnh được thực hiện khi điều kiện đúng ta có thể viết lại mẫu 1 như sau: If then Câu_lệnh 36
  47. Mẫu 2: If Then ' Các câu lệnh khi điều kiện đúng Else ' Các câu lệnh khi điều kiện sai End if Nếu chỉ có một câu lệnh được thực hiện trong mỗi trường hợp khi điều kiện đúng hoặc sai ta có thể viết như sau: If Then Câu_lệnh1 Else Câu_lệnh2 Trong đó câu_lệnh1 là lệnh được thực hiện khi điều kiện đúng còn câu_lệnh 2 là lệnh được thực hiện khi điều kiện sai. Ví dụ: Đoạn mã dưới đây: If x>0 then Msgbox ("Số dương") Else Msgbox ("Số âm") End if Có thể được viết như sau: If x>0 then Msgbox ("Số dương") Else Msgbox ("Số âm") Trong trường hợp nhiều điều kiện, chúng ta sử dụng mẫu 3 dưới đây: Mẫu 3: If Then ElseIf Then ElseIf Then Else End If Chú ý: Các mệnh đề If Then Else có thể lồng nhau. Ví dụ 2-2: Đoạn chương trình dưới đây sử dụng hàm InputBox để nhập giá trị cho 2 số nguyên x và y sau đó dùng MsgBox để đưa ra thông báo về số lớn nhất và số nhỏ nhất. Dim x%, y% 37
  48. x = InputBox("Nhập số thứ nhất") y = InputBox("Nhập số thứ hai") If x > y Then MsgBox("Số lớn nhất là " & x & Chr(13) & Chr(10) _ & "Số nhỏ nhất là" & y) Else MsgBox("Số lớn nhất là " & y & Chr(13) & Chr(10) _ & "Số nhỏ nhất là" & x) End If Trong ví dụ trên biểu thức Chr(13) & Chr(10) được dùng để tách chuỗi thông báo trong hộp thoại thành 2 dòng. Dấu _ dùng để xuống dòng khi chưa kết thúc câu lệnh. b. Lệnh Case Select Case Case ' Các lệnh thực hiện trong nhánh 1 Case ' Các lệnh thực hiện trong nhánh 2 Case Else ' Các lệnh thực hiện khi không có nhánh nào ở trên được chọn End Select Danh sách được đưa ra để làm điều kiện rẽ nhánh có thể rơi vào một trong các trường hợp sau: - biểu thức - biểu thức 1, biểu thức 2, - biểu thức 1 TO biểu thức 2 - IS biểu thức Ví dụ 2-3: Đoạn chương trình sau dùng InputBox để nhập vào giá trị của một tháng trong một năm và hiển thị số ngày của tháng đó. Dim thang, nam, songay As Integer thang = InputBox("Tháng") : nam = InputBox("Năm:") Select Case thang Case 1, 3, 5, 7, 8, 10, 12 songay = 31 Case 4, 6, 9, 11 songay = 30 38
  49. Case Else If (nam Mod 400=0) Or (nam Mod 4=0 And nam Mod 100 46 MsgBox("Hoa niên") End Select 2.4.4 Câu lệnh lặp a. For Next Cú pháp: For = To [Step ] ' Các câu lệnh [Exit For] ' Các câu lệnh Next [biến đếm] Các câu lệnh trong vùng For Next chỉ được thực hiện nếu có giá trị trong đoạn [ , ] Sau mỗi lần thực hiện, sẽ được tăng thêm . Nếu không chỉ định, có giá trị là 1. Nếu có trị > 0, cấu trúc chỉ thực hiện khi Nếu có trị >= 39
  50. Mệnh đề Exit For dùng để thoát ngang khỏi vòng lặp Ví dụ 2-5: Tính số tiền nhận được sau N tháng gửi tiết kiệm biết số tiền đem gửi là S và lãi suất kép là H% một tháng. Dim N%, i% Dim H, S As Decimal S = InputBox("Số tiền đem gửi:") H = InputBox("Lãi suất hàng tháng: (%)") N = InputBox("Số tháng gửi:") For i = 1 To N S += H * S / 100 Next MsgBox("Số tiền nhận được là " & S) b. For Each Next Cú pháp: For Each In ' Các câu lệnh [Exit For] ' Các câu lệnh Next [phần tử] Với cú pháp này, chương trình sẽ duyệt qua từng phần tử trong tập hợp đang duyệt. Chú ý kiểu của phần tử phải khai báo tương thích với kiểu của tập hợp đang duyệt. Exit For dùng để thoát khỏi vòng lặp For Ví dụ: Đoạn chương trình dưới đây dùng cấu trúc For Each Next để duyệt qua lần lượt các phần tử trong một tập hợp nhằm tìm phần tử có chứa chuỗi "Hello". Đoạn mã này giả thiết là tập hợp thisCollection đã được thiết lập và mỗi phần tử của nó thuộc kiểu String. Dim found As Boolean = False Dim thisCollection As New Collection For Each thisObject As String In thisCollection If thisObject = "Hello" Then found = True Exit For End If Next thisObject c. Do Loop Mẫu 1: 40
  51. Do While ' Các câu lệnh Loop Với cú pháp này, các câu lệnh đặt trong vùng Do While Loop chỉ thực hiện bao lâu có giá trị True. Sau mỗi lần thực hiện các câu lệnh trong vùng Do While Loop, sẽ được kiểm tra lại: Nếu trị True, thực hiện lại vòng lặp Nếu trị False, chấm dứt vòng lặp. Cấu trúc này kiểm tra trước khi thực hiện các lệnh nên sẽ không thực hiện lần nào nếu ngay lần đầu tiên có trị False. Mẫu 2: Do ' Các câu lệnh Loop While Tương tự Do While Loop, các câu lệnh chỉ tiếp tục thực hiện khi có giá trị True và sẽ kiểm tra lại sau mỗi lần thực hiện. Do kiểm tra sau khi thực hiện nên nếu ngay lần đầu có trị False, các lệnh cũng được thực hiện một lần. Mẫu 3: Do Untile ' Các câu lệnh Loop Mẫu 4: Do ' Các câu lệnh Loop Until Hai cú pháp này tương tự hai cú pháp trên (Do While Loop, Do Loop While), với một khác biệt là chỉ thực hiện hoặc tiếp tục thực hiện khi là False. Chúng ta có thể chấm dứt giữa chừng vòng lặp với lệnh Exit Do d. While End While Cú pháp While ' Các câu lệnh [ Exit While ] 41
  52. ' Các câu lệnh End While Cách sử dụng như Do While Loop Ví dụ 2-6: Tìm ước số chung lớn nhất của 2 số m và n Cách 1: - Dùng Do While Dim n%, m%, UCLN% n = InputBox("Nhập số thứ nhất:") m = InputBox("Nhập số thứ hai") Do While m n Then m = m-n Else n = n-m Loop UCLN = m msgBox("USCLN= " & UCLN) Cách 2: - Dùng Do Until Do Until m = n If m > n Then m = m-n Else n = n-m Loop Cách 3: - Dùng While End While While m n Then m = m - n Else n = n - m End While 2.5 Dữ liệu có cấu trúc 2.5.1 Enum 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: [Phạm vi] [ Shadows ] Enum [ As ] [= trị hằng 1] [= trị hằng 2] End Enum Trong đó phạm vi được xác định bởi một trong các từ khóa [Public | Protected | Friend | Protected Friend | Private] Ví dụ: 42
  53. 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. 2.5.2 Mảng Mảng là tập hợp các biến có cùng kiểu dữ liệu, cùng tên nhưng có chỉ số khác nhau. Trong VB.Net, mảng có chỉ số bắt đầu là 0 và luôn luôn là mảng động. Chúng ta có các cách khai báo mảng như sau. - Khai báo không khởi tạo kích thước và giá trị Dim a() as Integer 43
  54. Hoặc Dim a as Integer() - Khai báo có khởi tạo kích thước nhưng không khởi tạo giá trị ban đầu: Dim a(6) as Integer - Khai báo có khởi tạo kích thước và khởi tạo giá trị ban đầu: Dim a() as Integer = {1,2,3,4,5,6,7} Hoặc Dim a() as Integer = New Integer(6){1,2,3,4,5,6,7} Hoặc Dim a() as Integer = New Integer (6) {} Chú ý: Khi dấu { } rỗng, các phần tử có giá trị khởi tạo là giá trị mặc định của kiểu dữ liệu. Mảng có kiểu tham chiếu nên khi gán hai biến mảng cho nhau, biến được gán sẽ là một tham chiếu đến mảng bên phải toán tử =, khác với trong VB6, là tạo ra một mảng mới có số phần tử mang trị giống nhau. Mảng thuộc lớp System.Array nên có các thuộc tính và phương thức của lớp này. Sau đây là một số thuộc tính và phương thức đáng chú ý: Thuộc tính Tên Mô tả Length Số phần tử của mảng Rank Số chiều của mảng Phương thức: Tên Mô tả BinarySearch Tìm kiếm trên mảng một chiều đã được sắp xếp giá trị truyền vào, sử dụng thuật giải tìm kiếm nhị phân. Clear Gán các phần tử trong dãy chỉ ra bằng giá trị mặc định của kiểu dữ liệu các phần tử Clone Trả về bản sao cạn (shallow copy) của mảng. Bản sao này chỉ sao chép kiểu trị và kiểu tham chiếu nhưng không sao chép các đối tượng được tham chiếu đến. Copy Sao chép một phần của mảng vào mảng khác và thực hiện chuyển đổi kiểu nếu cần. CopyTo Sao chép toàn bộ các phần tử của mảng một chiều vào mảng một chiều được truyền vào bắt đầu từ vị trí chỉ ra. 44
  55. GetLength Trả về số phần tử của một chiều được chỉ ra trên mảng GetLowerBound Trả về chỉ số nhỏ nhất của một chiều được chỉ ra trên mảng GetUpperBound Trả về chỉ số lớn nhất của một chiều được chỉ ra trên mảng GetValue Trả về trị của một phần tử chỉ ra trên mảng IndexOf Trả về chỉ số của phần tử đầu tiên trên mảng một chiều (hoặc trên một vùng của mảng) trùng với giá trị truyền vào LastIndexOf Trả về chỉ số của phần tử cuối cùng trên mảng một chiều (hoặc trên một vùng của mảng) trùng với giá trị truyền vào Reverse Đảo ngược thứ tự các phần tử trên mảng một chiều hoặc trên một phần của mảng SetValue Gán trị cho một phần tử chỉ ra trên mảng Sort Sắp xếp các phần tử trong mảng một chiều 2.5.3 Structure Khác với mảng, Structure, kiểu do người dùng định nghĩa (UDT: User Defined Type), là một cấu trúc gồm một hoặc nhiều thành phần có kiểu dữ liệu khác nhau. Tuy chúng ta có thể truy xuất riêng lẻ các thành phần nhưng Structure được xem như là một thực thể duy nhất. Trong phiên bản trước, UDT được khai báo với từ khóa Type End Type. Trong VB.NET, cú pháp khai báo Structure như sau: [Public|Private|Protected] Structure {Dim|Public|Private|Friend} As {Dim|Public|Private|Friend} As End Structure Với Structure, chúng ta được phép khai báo các phương thức. Sau đây là các đặc điểm của Structure: Có các thành phần, kể cả bộ khởi tạo, phương thức, thuộc tính, hằng, sự kiện. Có thể cài đặt các lớp giao tiếp (Interface). Có thể có các bộ khởi tạo chung, có hoặc không có tham số. Structure là kiểu trị. Tất cả các thành phần của Structure mặc định là Public. Các thành phần của Structure không được khai báo với từ khóa Protected. Structure không thể kế thừa. Mỗi Structure có một bộ khởi tạo mặc nhiên không tham số ban đầu. Bộ khởi tạo này sẽ khởi tạo mọi thành phần dữ liệu của Structure với giá trị mặc định của chúng. Chúng ta không thể định nghĩa lại chức năng này. 45
  56. Vì Structure là kiểu trị (Value Type), nên mỗi biến Structure luôn luôn gắn liền với một thể hiện Structure. 2.6 Xử lý lỗi 2.6.1 Phân loại lỗi Trong VB.NET, chúng ta có thể gặp các loại lỗi sau: Syntax error Lỗi cú pháp, còn gọi là lỗi trong lúc thiết kế. Những lỗi này dễ chỉnh sửa vì VB.NET sẽ kiểm tra cú pháp khi ta đang nhập từ bàn phím nên sẽ báo lỗi tức thời khi ta gõ sai hoặc dùng một từ không thích hợp. Run-time error Lỗi thực thi xảy ra khi chương trình đang thực thi. Đây là những lỗi khó xác định hơn lỗi cú pháp. Lỗi thực thi có thể từ các lý do khác nhau như: Mở một tập tin không tồn tại Truy xuất một thư mục nhưng không có quyền trên đó Truy xuất dữ liệu một bảng không tồn tại trong CSDL Chia cho số 0 Nhập chuỗi cho nơi cần nhập số hoặc ngược lại, v.v Logic error Lỗi luận lý cũng xảy ra khi chương trình đang thực thi và được thể hiện dưới những hình thức hay những kết quả không mong đợi. Loại lỗi này thường do sai lầm trong thuật giải. 2.6.2 Xử lý lỗi Một lỗi xảy ra khi chương trình đang chạy gọi là một Exception. Trong CLR, Exception là một đối tượng từ lớp System.Exception. Chúng ta cần lưu ý một lỗi xảy ra trong lúc thực thi không làm treo chương trình, nhưng nếu không được xử lý sẽ làm treo chương trình. CLR chỉ ra tình trạng lỗi qua lệnh Throw. Lệnh này sẽ đưa ra một đối tượng kiểu System.Exception chứa thông tin về lỗi đang xảy ra. VB.NET cung cấp một cơ chế xử lý lỗi hoàn chỉnh với cú pháp sau: Try ' các lệnh có khả năng gây lỗi Catch ' các lệnh xử lý khi lỗi xảy ra [Finally] ' các lệnh thực hiện sau cùng 46
  57. End Try Cấu trúc này cho phép chúng ta thử (Try) thực hiện một khối lệnh xem có gây lỗi không; nếu có sẽ bẫy và xử lý (Catch) lỗi. Cấu trúc này chia làm các khối sau: Khối Try: Chứa các câu lệnh có khả năng gây lỗi Khối Catch: Các dòng lệnh để bẫy và xử lý lỗi phát sinh trên khối Try. Khối này gồm một loạt các lệnh bắt đầu với từ khóa Catch, biến kiểu Exception ứng với một kiểu Exception muốn bẫy và các lệnh xử lý. Dĩ nhiên, chúng ta có thể dùng một lệnh Catch cho các System.Exception, nhưng như thế sẽ không cung cấp thông tin đầy đủ cho người dùng về lỗi đang xảy ra cũng như hướng dẫn cách xử lý cụ thể cho mỗi tình huống. Ngoài những lỗi đã xử lý, có thể xảy ra những lỗi ngoài dự kiến, để xử lý các lỗi này, chúng ta nên đưa thêm một lệnh Catch để bẫy tất cả các trường hợp còn lại và xuất thông tin về lỗi xảy ra. Khối Finally: Khối tùy chọn, sau khi chạy qua các khối Try và Catch nếu không có chỉ định nào khác, khối Finally sẽ được thực hiện bất kể có xảy ra lỗi hay không. Cuối cùng, cấu trúc bẫy và xử lý lỗi chấm dứt với từ khóa End Try. Cú pháp chung cho một cấu trúc xử lý lỗi như sau Try ' khối lệnh có thể gây lỗi Catch As [When ] ' khối lệnh bẫy và xử lý lỗi Catch As [When ] ' khối lệnh bẫy và xử lý lỗi Finally ' khối lệnh kết thúc End Try Ví dụ: Dim d as Double, i as Integer Try i = CInt(InputBox("Xin nhập một số nguyên")) d = 42 \ i Catch ex As DivideByZeroException Messagebox.Show("Không thể chia cho số không") Catch ex As InvalidCastException 47
  58. Messagebox.Show("Xin nhập số nguyên !") End Try Câu lệnh Catch có thể có nhiều cách sử dụng: a. Bẫy không có điều kiện Dim d as Double, i as Integer Try i = CInt(InputBox(“Xin nhập một số nguyên”)) d = 42 \ i Catch Messagebox.Show(“Không thể chia") End Try b. Bẫy với kiểu lỗi chung Exception Dim d As Double, i As Integer Try i = InputBox("Xin nhập một số nguyên") d = 42 \ i Catch ex As Exception MessageBox.Show("Không thể chia") End Try c. Bẫy với những kiểu Exception đặc biệt Các kiểu Exception đặc biệt thường gặp: Tên Mô tả ArgumentException Tham số truyền không hợp lệ DivideByZeroException Chương trình thực hiện phép chia một số cho số không OverFlowException Kết quả của một phép toán hoặc của một phép chuyển đổi kiểu lớn hơn khả năng lưu giữ của biến FieldAccessException Chương trình truy xuất một field Private hoặc Protected của lớp InvalidCastException Chương trình đang cố thực hiện một chuyển đổi không hợp lệ InvalidOperationException Chương trình đang cố gọi một thủ tục không hợp lệ MemberAccessException Truy xuất một thành phần của một lớp bị thất bại 48
  59. Tên Mô tả MethodAccessException Chương trình đang cố gọi thủ tục Private hoặc Protected của lớp NullReferenceException Chương trình đang cố truy xuất một đối tượng không tồn tại TypeUnloadException Chương trình truy xuất một lớp chưa được tải lên vùng nhớ d. Bẫy với điều kiện When Dim d As Double, i As Integer Try i = InputBox("Xin nhập một số nguyên") d = 42 \ i Catch ex As Exception When i = 0 MessageBox.Show("Không thể chia cho số không") End Try 2.7 Một số chỉ thị của VB.NET 2.7.1 Chỉ thị Option Explicit ON|OFF Khi Option Eplicit là ON, VB.NET không cho phép sử dụng các biến mà không khai báo trước. 2.7.2 Chỉ thị #Region #End Region Chỉ thị #Region #End Region được dùng để đánh dấu một khối lệnh có thể thu gọn, giãn ra trên cửa sổ viết lệnh. Cú pháp: #Region ' khối lệnh #End Region Trong đó : bắt buộc, có giá trị kiểu String, là tiêu đề của khối lệnh Ví dụ với đoạn mã sau: #Region "Các khai báo" ' Đưa vào các dòng lệnh khai báo. #End Region Khi thu lại ta sẽ thấy trên cửa sổ lệnh: + Các khai báo 49
  60. 2.8 Thủ tục (Procedure) 2.8.1 Khái niệm Thủ tục (procedure) là một khối lệnh Visual Basic được đặt trong cặp từ khóa khai báo (Function, Sub, Operator, Get, Set) và từ khóa kết thúc tương ứng với nó(End). Thủ tục được thi hành tại bất kỳ một vị trí nào trong chương trình. Lệnh thi hành một thủ tục được xem như lời gọi thủ tục. Khi thực hiện xong các lệnh trong một thủ tục ứng dụng sẽ quay lại thực hiện câu lệnh tiếp theo câu lệnh đã gọi thủ tục. Thủ tục có thể được gọi trong một câu lệnh hoặc được gọi trong một biểu thức. Trong VB.NET thủ tục được chia thành 5 loại: Sub Procedure, Function Procedure, Property Procedure, Operator Procedure,Generic Procedure. 2.8.2 Tham số của thủ tục Định nghĩa - Các thông số đầu vào của một thủ tục được gọi là tham số của thủ tục. - Tham số (parameter) là các tên (định danh) được các thủ tục dùng để nhận thông tin đầu vào để thực hiện các xử lý. Khi một thủ tục được gọi thì nó sẽ đòi hỏi các đối số cụ thể tương ứng với các tham số và thông thường các đối số này phải được gán giá trị cụ thể trước khi thủ tục thực thi. Phân loại tham số Có hai loại tham số. - Tham biến: thay đổi (về mặt giá trị sau lời gọi hàm). Tham số loại này trong VB.NET được khai báo với từ khóa ByRef. - Tham trị: Không đổi (về mặt giá trị sau lời gọi hàm). Tham số loại này trong VB.NET được khai báo với từ khóa ByVal. 2.8.3. Sub Procedure Sub là một dãy các câu lệnh để thực thi một công việc, một chức năng đặc thù nào đó, sub được xem như là một thành phần của chương trình. Nói một cách khác, sub là các câu lệnh được nhóm vào một khối và được đặt tên. Các sub có thể được gọi để thi hành (thường là thông qua subname). Điều này cho phép gọi tới những thủ tục nhiều lần mà không cần phải lặp lại các khối lệnh giống nhau một khi đã hoàn tất việc viết mã lệnh cho các thủ tục đó chỉ một lần. - Từ khóa để tham khảo khái niệm thủ tục trong MSDN là “Sub Procedures, Sub Statement”. Khai báo sub Cấu trúc tổng quát của việc định nghĩa một thủ tục được đưa ra như sau: 50
  61. [ ] [accessmodifier] [proceduremodifiers] [Shared] [Shadows] Sub name [(Of typeparamlist)] [(parameterlist)] [Implements implementslist | Handles eventlist] các lệnh [ Exit Sub ] các lệnh End Sub Cú pháp thông dụng nhất để khai báo một thủ tục dạng sub là: [Public|Protected|Private] Sub [(DS tham số)] Câu lệnh 1 Câu lệnh 2 End Sub Trong đó - Public, Protected, Private là các từ khóa xác định phạm vi của thủ tục - Tên thủ tục đặt theo qui tắc giống tên biến. Trong VB.NET các thủ tục có thể trùng tên nhau song số tham số hoặc kiểu dữ liệu của các tham số phải khác nhau. - Danh sách tham số: phải xác định rõ là tham biến hay tham trị. Ví dụ: Thủ tục nhập tên, điểm toán và điểm văn của một sinh viên: Public Sub Nhap(ByRef HoTen As String,ByRef Toan As _ Integer,ByRef Van As Integer) Console.Write("Nhap ho ten:") HoTen = Console.ReadLine() Console.Write("Nhap toan:") Toan = Console.ReadLine() Console.Write("Nhap van:") Van = Console.ReadLine() End Sub Trong thủ tục này, giá trị của các tham số HoTen, Toan, Van sau khi kết thúc thủ tục đã được thay bằng các giá trị mới nhập từ bàn phím do đó chúng phải là tham biến và được khai báo với từ khóa ByRef. Ví dụ: Thủ tục xuất ra màn hình Console tên và điểm toán, điểm văn, điểm trung bình của sinh viên: Public Sub Xuat(ByVal HoTen As String, ByVal Toan As _ Integer,ByVal Van As Integer, ByVal DiemTrungBinh As Double) 51
  62. Console.WriteLine("Ho ten :" & HoTen) Console.WriteLine("Toan :" & Toan) Console.WriteLine("Van:" & Van) Console.WriteLine("Diem Trung Binh:" & DiemTrungBinh) End Sub Trong thủ tục Xuat; các tham số HoTen, Toan, Van, DiemTrungBinh không thay đổi giá trị do đó có thể khai báo chúng là tham trị bằng cách sử dụng từ khóa ByVal. Lời gọi thủ tục: - Thủ tục sử dụng như một lệnh bằng cách viết tên của thủ tục cùng với danh sách tham số. - Có thể sử dụng câu lệnh Call để gọi thủ tục. - Thông thường, thủ tục sẽ kết thúc và trở về đơn thể gọi nó khi gặp từ khóa End Sub. Tuy nhiên có thể thoát trực tiếp khỏi thủ tục tại bất kỳ một vị trí nào trong thân nó bằng câu lệnh Exit Sub hoặc Return. Ví dụ 2-8: Chương trình nhập họ tên, điểm toán, điểm văn của một sinh viên và xuất ra màn hình các thông tin về họ tên, điểm toán, điểm văn và điểm trung bình của sinh viên đó. Chương trình được xây dựng gồm 1 đơn thể - Module chứa 3 thủ tục là Nhap (nhập dữ liệu), Xuat (hiển thị dữ liệu), XuLy(tính điểm trung bình). Thủ tục Main() chứa các lệnh cần thiết để khai báo biến, gọi và truyền tham số cho các thủ tục. Imports System Public Module Module1 Public Sub Nhap(ByRef HoTen As String,ByRef Toan As _ Integer,ByRef Van As Integer) Console.Write("Nhap ho ten:") HoTen = Console.ReadLine() Console.Write("Nhap toan:") Toan = Console.ReadLine() Console.Write("Nhap van:") Van = Console.ReadLine() End Sub Public Sub XuLy(ByVal Toan As Integer, ByVal Van As _ Integer,ByRef DiemTrungBinh As Double) DiemTrungBinh = (Toan + Van) / 2 End Sub 52
  63. Public Sub Xuat(ByVal HoTen As String, ByVal Toan As _ Integer,ByVal Van As Integer, ByVal DiemTrungBinh As Double) Console.WriteLine("Ho ten :" & HoTen) Console.WriteLine("Toan :" & Toan) Console.WriteLine("Van:" & Van) Console.WriteLine("Diem Trung Binh:" & DiemTrungBinh) End Sub Sub Main() Dim ht As String = "" Dim t,v As Integer Dim tb As Double Nhap(ht, t, v) XuLy(t, v, tb) Xuat(ht, t, v, tb) End Sub End Module 2.8.4 Function Procedure (Hàm) Một hàm là dãy các lệnh để thực thi một thao tác đặc thù nào đó như là một phần của chương trình lớn hơn. Nói một cách khác hàm là các câu lệnh được nhóm vào một khối, được đặt tên và có một giá trị trả về. Các hàm có thể được gọi để thi hành (thường là thông qua tên của hàm). Điều này cho phép gọi tới hàm nhiều lần mà không cần phải lặp lại các khối mã giống nhau một khi đã hoàn tất việc viết mã cho các hàm đó chỉ một lần. Trong VB.NET quan niệm hàm là một thủ tục có giá trị trả về. Từ khóa để tham khảo về hàm trong MSDN là "Function Statement”. Cú pháp khai báo hàm Hàm được định nghĩa và khai báo tương tự như thủ tục. [ ][accessmodifier][proceduremodifiers] [Shared][Shadows] Function name [(Of typeparamlist)] [(parameterlist)] [As returntype] [Implements implementslist | Handles eventlist] [ statements ] 53
  64. [ Exit Function ] [ statements ] End Function Thông dụng nhất của việc khai báo hàm là như sau: [Public, Protected, Private] Function [(Danh sách các tham số)] As Kiểu dữ liệu trả về Các câu lệnh [Exit Function] Các câu lệnh End Function Trong đó - Public, Protected, Private là các từ khóa xác định phạm vi của hàm. - Tên hàm đặt theo qui tắc giống tên sub; có thể trùng tên nhau miễn là khác về kiểu dữ liệu, số tham số. - Danh sách tham số: phải xác định rõ là tham biến hay tham trị. - Kiểu dữ liệu trả về: Là kiểu dữ liệu của biểu thức mà hàm trả về. - Lệnh Exit Function dùng để thoát ngang một hàm. - Nếu muốn hàm trả về một giá trị ta dùng lệnh return biểu thức. Ví dụ: Thủ tục XuLy để tính điểm trung bình trong ví dụ 3-3 có thể xây dựng bằng hàm như sau: Public Function XuLy(ByVal Toan As Integer, ByVal Van _ As Integer) As Double return (Toan+Van)/2 End Function Hàm trả về giá trị (Toan+Van)/2 bằng câu lệnh return. Trong trường hợp này Sub Main() được viết như sau: Sub Main() Dim ht As String = "" Dim t,v As Integer Dim tb As Double Nhap(ht, t, v) tb=XuLy(t, v) Xuat(ht, t, v, tb) End Sub 54
  65. Lời gọi hàm - Hàm được sử dụng trong biểu thức bằng cách viết tên hàm kèm theo danh sách các tham số . Ví dụ ta có thể viết tb=XuLy(Toan,Van) - Trong trường hợp không cần quan tâm đến giá trị của hàm, ta có thể gọi hàm như cách gọi của thủ tục. NỘI DUNG PHẦN THẢO LUẬN 1. Phương pháp lập trình hướng thủ tục và cách xây dựng. 2. Tham số, tham biến, giá trị trả về của sub, function 3. Cấu trúc và các giải thuật trên cấu trúc TÓM TẮT NỘI DUNG CỐT LÕI Trong chương này sinh viên cần chú ý đến các nội dung sau: • Khai báo và sử dụng các biến • Cách viết các hằng giá trị trong VB.NET • Toán tử • Lệnh rẽ nhánh, Vòng lặp • Mảng, Cấu trúc • Sub, Function BÀI TẬP ỨNG DỤNG Dùng ngôn ngữ lập trình VB.NET để tạo các ứng dụng Console giải các bài tập dưới đây: 2.1. Xây dựng, biên dịch và chạy thử các chương trình tương ứng với ví dụ 2-1, 2-2, 2-3, 2-4, 2-5, 2-6. 2.2. Viết chương trình nhập vào một phân số. Hãy cho biết phân số đó là phân số âm hay dương hay bằng không. 2.3. Viết chương trình nhập tọa độ hai điểm trong không gian. Tính khoảng cách giữa chúng và xuất kết quả. 2.4. Viết chương trình giải phương trình bậc nhất ax+b=0 2.5. Viết chương trình giải phương trình bậc hai ax2+bx+c=0 2.6. Viết chương trình nhập vào một số nguyên và kiểm tra xem đó có phải là số chính phương hay không. 55
  66. 2.7. Viết chương trình nhập vào một số kiểu Long và kiểm tra xem số đó là số nguyên tố hay hợp số. 2.8. Xây dựng hàm Public Function SoNT (ByVal n as Long) as Boolean. Hàm trả về True nếu n là số nguyên tố và trả về giá trị False nếu n là hợp số. HƯỚNG DẪN TỰ HỌC Ở NHÀ 1. Bài tập 2.1: * Chạy ví dụ 2-1 (chương trình nhập tên, điểm toán, điểm văn và in ra tên, điểm trung bình). - Dùng Notepad biên soạn file có tên C:\vd1.vb với nội dung là chương trình trong ví dụ 2-1. - Khởi động Visual Studio 2005 Command prompt - Biên dịch chương trình vd1.vb thành file exe bằng lệnh vbc C:\vd1.vb và chạy chương trình từ file exe này. * Sử dụng lệnh Console.Write() thay cho MsgBox và Console.Readline() thay cho InputBox để viết lại các chương trình tương ứng với các ví dụ 2-2, 2-3, 2-4, 2-5, 2-6. Sau đó dùng Visual Studio 2005 Command prompt để biên dịch và chạy thử các chương trình này. 2. Bài tập 2.2: Sử dụng hai biến a và b cho tử số và mẫu số. Nhập dữ liệu lần lượt cho từng biến sau đó kiểm tra các trường hợp. Chú ý kiểm tra mẫu số phải khác 0 trước khi thực hiện phép chia. 3. Bài tập 2.5: Sử dụng hàm SQRT(d) để lấy căn bậc 2 của d (delta). Chú ý bổ sung lệnh Imports System.Math vào đầu chương trình sau lệnh Imports System để có thể sử dụng được các hàm toán học này. 4. Bài tập 2.6: Sử dụng hàm ROUND (làm tròn) và SQRT (tính căn bậc 2). Hai hàm này nằm trong Namespace System.Math. 56
  67. Chương 3 LỚP VÀ ĐỐI TƯỢNG TRONG VB.NET MỤC TIÊU CỦA CHƯƠNG - Về kiến thức + Củng cố các kiến thức về lập trình hướng đối tượng. + Trang bị cho sinh viên cách khai báo lớp, đối tượng, cách xây dựng các phương thức và thuộc tính trong VB.NET - Về kỹ năng + Sau khi kết thúc bài sinh viên hiểu được cách vận dụng lập trình hướng đối tượng trong VB.NET + Tự xây dựng được một số lớp, đối tượng, phương thức đơn giản. + Kết hợp cú pháp lập trình VB.NET đã học trong chương 2 với phương pháp lập trình hướng đối tượng để viết các ứng dụng Console giải quyết các bài tập được cho. - Về thái độ: Giúp sinh viên có sự so sánh tương quan giữa VB.NET với một số ngôn ngữ lập trình hướng đối tượng khác như C++ NỘI DUNG BÀI GIẢNG LÝ THUYẾT 3.1 Tổng quan về lập trình hướng đối tượng Tư tưởng chính của lập trình hướng đối tượng là xây dựng một chương trình dựa trên sự phối hợp hoạt động của các đối tượng. Một đối tượng bao gồm hai thành phần chính là thông tin lưu trữ và các thao tác xử lý. Trong thế giới thực, đối tượng là thực thể tồn tại như con người, xe, máy tính, v.v Trong ngôn ngữ lập trình, đối tượng có thể là màn hình, điều khiển v.v Lập trình hướng đối tượng là kiểu lập trình nhằm vào sự tương tác giữa các đối tượng. Mỗi đối tượng có những thuộc tính (thông tin lưu trữ), những phương thức xác định các chức năng của đối tượng. Bên cạnh đó, đối tượng cũng có khả năng phát sinh các sự kiện khi thay đổi thông tin, thực hiện một chức năng hay khi đối tượng khác tác động vào. Tất cả những thuộc tính, phương thức và sự kiện tạo nên cấu trúc của đối tượng. Có bốn ý niệm trong Lập trình hướng đối tượng bao gồm: Abstraction: Tính trừu tượng Encapsulation: Tính bao bọc Inheritance: Tính kế thừa Polymorphism: Tính đa hình Mỗi ý niệm đều có vai trò quan trọng trong lập trình hướng đối tượng. 57
  68. 3.1.1 Tính trừu tượng Chúng ta thường lẫn lộn giữa lớp (Class) và đối tượng (Object). Cần phân biệt lớp là một ý niệm trừu tượng, còn đối tượng là một thể hiện của lớp. Ví dụ Class ConNgười là một ý niệm trừu tượng, nhưng NguyễnVăn A là một đối tượng cụ thể. Từ những đối tượng giống nhau, chúng ta có thể trừu tượng hóa thành một lớp đối tượng. Tính trừu tượng cho phép chúng ta loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình. 3.1.2 Tính bao bọc Mỗi Class được xây dựng để thực hiện một nhóm chức năng đặc trưng của riêng Class, trong trường hợp một đối tượng thuộc Class cần thực hiện một chức năng không nằm trong khả năng vì chức năng đó thuộc về một đối tượng thuộc Class khác, nó sẽ yêu cầu đối tượng đó đảm nhận thực hiện công việc. Một điểm quan trọng trong cách giao tiếp giữa các đối tượng là một đối tượng sẽ không được truy xuất trực tiếp vào thành phần dữ liệu của đối tượng khác cũng như không đưa thành phần dữ liệu của mình cho đối tượng khác một cách trực tiếp. Tất cả mọi thao tác truy xuất vào thành phần dữ liệu từ đối tượng này qua đối tượng khác phải được thực hiện bởi các phương thức (method) của chính đối tượng chứa dữ liệu. Đây cũng chính là một tính chất quan trọng trong lập trình hướng đối tượng gọi là tính bao bọc (encapsulation) dữ liệu. Tính bao bọc cho phép dấu thông tin của đối tượng bằng cách kết hợp thông tin vớiø các phương thức liên quan đến thông tin trong đối tượng. Ví dụ: Xe hơi có các chức năng (phương thức phô diễn bên ngoài) như Ngừng, Chạy tới, Chạy lùi. Đây là những gì cần thiết cho Tài xế khi tương tác với Xe hơi. Xe hơi có thể có một đối tượng Động cơ nhưng Tài xế không cần phải quan tâm. Tất cả những gì cần quan tâm là những chức năng để có thể vận hành xe. Do đó, khi thay một Động cơ khác, Tài xế vẫn sử dụng các chức năng cũ để vận hành Xe hơi bao lâu các phương thức phô diễn bên ngoài (Interface) không bị thay đổi. 3.1.3 Tính kế thừa Tính kế thừa là khả năng cho phép ta xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã có. Lớp đã có gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con và đương nhiên kế thừa tất cả các thành phần của lớp Cha, có thể mở rộng công năng các thành phần kế thừa cũng như bổ sung thêm các thành phần mới 3.1.4 Tính đa hình Tính đa hình là khả năng một ngôn ngữ xử lý các đối tượng hữu quan theo cùng một cách. Tính đa hình thể hiện dưới nhiều hình thức: 58
  69. * Kết nối trễ - Late Binding Đây là khả năng cho phép người lập trình gọi trước một phương thức của đối tượng, tuy chưa xác định được đối tượng. Đến khi thực hiện, chương trình mới xác định được đối tượng và gọi phương thức tương ứng của đối tượng đó. Kết nối trễ giúp chương trình được uyển chuyển chỉ yêu cầu đối tượng cung cấp đúng phương thức cần thiết là đủ. Ví dụ: Chúng ta có lớp Xe với phương thức Chạy và các lớp Xe đạp, Xe hơi, Xe đẩy cùng phát sinh từ lớp Xe. Chúng ta chưa biết sẽ sử dụng xe gì để di chuyển vì tùy thuộc tình hình có sẵn xe nào nên gọi trước phương thức Chạy. Khi chương trình thực thi, tùy theo đối tượng của lớp nào được đưa ra mà phương thức Chạy của đối tượng đó được gọi. * Nạp chồng - Overloading Khả năng cho phép một lớp có nhiều thuộc tính, phương thức cùng tên nhưng với các tham số khác nhau về loại cũng như về số lượng. Khi được gọi, dựa vào tham số truyền vào, thuộc tính hay phương thức tương ứng sẽ được thực hiện. * Ghi chồng - Overriding Hình thức này áp dụng cho lớp Con đối với lớp Cha. Lớp Con được phép có một phương thức cùng tên, cùng số tham số có kiểu dữ liệu như phương thức của lớp Cha hoặc những lớp trước đó nữa (lớp phát sinh ra lớp Cha ) với cài đặt khác đi. Lúc thực thi, nếu lớp Con không có phương thức riêng, phương thức của lớp Cha sẽ được gọi, ngược lại nếu lớp Con có phương thức riêng thì phương thức này sẽ được gọi. 3.2 Lớp đối tượng 3.2.1 Khai báo lớp Lớp hiểu một cách đơn giản là sự tích hợp giữa hai thành phần: thành phần dữ liệu và thành phần xử lý. Cú pháp khai báo lớp [AccessModifier][Keyword] Class _ ClassName [Implements InterfaceName] 'Declare properties and methods End Class Trong đó - AccessModifier định nghĩa khả năng truy cập của class, sử dụng một trong các từ khóa : Public, Private, Protected, Friend, Protected Friend. - Keyword chỉ rõ các lớp có được thừa kế hay không, sử dụng một trong các từ khóa Inherit, NotInheritable hoặc MustInherit. 59
  70. - Class đánh dấu bắt đầu một class - Classname: tên của một class - Implements chỉ rõ class thực thi trên giao diện nào. - InterfaceName miêu tả tên giao diện.Một class có thể thực thi trên một hoặc nhiều giao diện. - End Class đánh dấu kết thúc khai báo của một class - Từ khóa để tham khảo khái niệm class trong MSDN là “Class statement” 3.2.2 Đối tượng Đối tượng là 1 sự thể hiện của lớp. Một lớp có thể có nhiều sự thể hiện khác nhau. Cú pháp khai báo đối tượng: Dim variablename As [New] { objectclass | Object } Ví dụ minh hoạ: Dim a As new CHocSinh Dim x As new ChocSinh Dim y As new CHocSinh Trong ví dụ trên ta nói a,x,y là 3 đối tượng thuộc class CHocSinh. Nói cách khác, trong ví dụ này, lớp CHocSinh có 3 thể hiện. Chú ý: - Có thể có nhiều đối tượng cùng thuộc về một lớp. - Từ khóa để tham khảo khái niệm đối tượng trong MSDN là “object variables, declaring” 3.2.3 Phương thức Phương thức là chức năng mà đối tượng thuộc về lớp có thể thực hiện. Đó có thể là một thủ tục hoặc một hàm. 3.2.4 Ví dụ về thiết kế lớp Viết chương trình nhập họ tên, điểm toán, điểm văn của một học sinh. Tính điểm trung bình và xuất kết quả ra Console. Đơn thể lớp học sinh: Public Class CHocSinh Private HoTen As String Private Toan As Integer Private Van As Integer Private DiemTrungBinh As Double Public Sub New() 60
  71. Return End Sub Public Sub Nhap() Console.Write("Nhap ho ten:") HoTen = Console.ReadLine() Console.Write("Nhap toan:") Toan = Console.ReadLine() Console.Write("Nhap van:") Van = Console.ReadLine() End Sub Public Sub XuLy() DiemTrungBinh = (Toan + Van) / 2 End Sub Public Sub Xuat() Console.WriteLine("Ho ten :" & HoTen) Console.WriteLine("Toan :" & Toan) Console.WriteLine("Van:" & Van) Console.WriteLine("Diem Trung Binh:" & DiemTrungBinh) End Sub End Class Đơn thể chính: Module Module1 Sub Main() Dim hs As New CHocSinh hs.Nhap() hs.XuLy() hs.Xuat() End Sub End Module 3.3 Phương thức thiết lập và phương thức phá hủy 3.3.1 Phương thức thiết lập Các phương thức thiết lập của một lớp có nhiệm vụ thiết lập thông tin ban đầu cho các đối tượng thuộc về lớp ngay khi đối tượng được khai báo. a. Các đặc điểm của phương thức thiết lập - Phương thức thiết lập của lớp được định nghĩa thông qua toán tử new. - Không có giá trị trả về. - Được tự động gọi thực hiện ngay khi đối tượng được khai báo. 61
  72. - Có thể có nhiều phương thức thiết lập trong một lớp. - Trong một quá trình sống của đối tượng thì chỉ có 1 lần duy nhất phương thức thiết lập được gọi thực hiện đó là khi đối tượng được khai báo. - Các phương thức thiết lập của lớp thuộc nhóm các phương thức khởi tạo. - Từ khóa để tham khảo trong MSDN là “New constructor”. Chú ý: Khi khai báo một lớp đối tượng trong VB.NET ta phải định nghĩa ít nhất một phương thức thiết lập cho lớp đó. Thông thường các lập trình viên chọn là phương thức thiết lập mặc định (không nhận tham số đầu vào). Tuy nhiên, đây không phải là phương thức thiết lập bắt buộc phải định nghĩa. b. Phân loại phương thức thiết lập Để đơn giản ta có thể chia các phương thức thiết lập của một lớp thành 3 nhóm như sau: - Phương thức thiết lập mặc định. - Phương thức thiết lập sao chép. - Phương thức thiết lập nhận tham số đầu vào. Về mặt nguyên tắc có bao nhiêu phương thức khởi tạo thì có bấy nhiêu phương thức thiết lập, phương thức khởi tạo mặc định thì tương ứng với phương thức thiết lập mặc định, phương thức khởi tạo dựa vào 1 đối tượng khác tương ứng 1 phương thức thiết lập sao chép, các phương thức khởi tạo còn lại tương ứng với lại phương thức thiết lập nhận tham số đầu vào. c. Ứng dụng phương thức thiết lập Ví dụ: Cần xác định và cài đặt các phương thức thiết lập cho lớp phân số. Lớp phân số có hai thuộc tính tử số và mẫu số. - Phương thức thiết lập mặc định: tử số được lấy mặc định là 0 và mẫu số được lấy mặc định là 1. - Phương thức thiết lập khi biết tử số: tử số được gán giá trị tương ứng với giá trị của đối số đầu vào và mẫu số được lấy mặc định là 1. - Phương thức thiết lập khi biết đầy đủ thông tin: tử số và mẫu số được gán giá trị tương ứng với giá trị của các đối số đầu vào. - Phương thức thiết lập sao chép: nhận tham số đầu vào là một đối tượng cùng thuộc về lớp phân số và tạo ra một đối tượng phân số mới giống hoàn toàn đối tượng phân số đối số tương ứng. Chương trình minh họa ĐƠN THỂ LỚP PHÂN SỐ: Public Class CphanSo 62
  73. 'Các thuộc tính Private Tu As Integer Private Mau As Integer ' Phương thức thiết lập mặc định Public Sub New() Tu = 0 Mau = 1 End Sub ' Phương thức thiết lập khi biết tử số Public Sub New(ByVal t As Integer) Tu = t Mau = 1 End Sub ' Phương thức thiết lập khi biết đầy đủ thông tin Public Sub New(ByVal t As Integer, ByVal m As Integer) Tu = t Mau = m End Sub ' Phương thức thiết lập sao chép Public Sub New(ByRef ps As CPhanSo) Tu = ps.Tu Mau = ps.Mau End Sub Public Sub Nhap() Console.Write("Nhap tu: ") Tu = Console.ReadLine() Console.Write("Nhap mau: ") Mau = Console.ReadLine() End Sub Public Sub Xuat() Console.WriteLine(Tu & "/" & Mau) End Sub End Class HƯỚNG DẪN SỬ DỤNG CONSTRUCTOR Module Module1 Sub Main() Dim a As New CPhanSo 63