Giáo trình Lập trình window 1 gồm các nội dung chính sau: Cơ bản về C#; Bài 2: Xây dựng lớp – Đối tượng; Bài 3: Kế thừa – Đa hình; Bài 4: Nạp chồng toán tử Bài 5: Cấu trúc; Bài 6: Thực thi giao diện; Bài 7: Mảng; Bài 8: Xử lý chuỗi. Mời các bạn cùng tham khảo!
ỦY BAN NHÂN DÂN TỈNH AN GIANG TRƢỜNG CAO ĐẲNG NGHỀ AN GIANG GIÁO TRÌNH MƠ ĐUN : Lập trình window NGHỀ : LẬP TRÌNH MÁY TÍNH TRÌNH ĐỘ : CAO ĐẲNG (Ban hành theo Quyết định số: /QĐ-CĐN, ngày tháng Hiệu trưởng trường Cao đẳng nghề An Giang) năm 20 An Giang, 2019 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng ngun trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU “LẬP TRÌNH WINDOW 1” mođul đƣợc bố trí trƣớc mơn học Lập trình window 2, với u cầu ngƣời học phải có kiến thức cấu trúc liệu, lập trình hƣớng đối tƣợng Với chƣơng trình mơn học 90 giờ, giáo trình cung cấp cho sinh viên cách thức lập trình console Cuốn Giáo trình bao gồm số nội dung chính: Bài 1: Cơ C# Bài 2: Xây dựng lớp – Đối tƣợng Bài 3: Kế thừa – Đa hình Bài 4: Nạp chồng toán tử Bài 5: Cấu trúc Bài 6: Thực thi giao diện Bài 7: Mảng Bài 8: Xử lý chuỗi Trong trình biên soạn, thân cố gắng hồn thiện giáo trình nhƣng khơng tránh khỏi thiếu sót, hạn chế Mong đƣợc đồng nghiệp sinh viên đóng góp ý kiến để giáo trình ngày hồn thiện An Giang, ngày tháng năm 20 Tham gia biên soạn Trần Thị Kim Ngọc MỤC LỤC ĐỀ MỤC TRANG Lời giới thiệu Mục lục Giáo trình modun Nội dung giáo trình Bài 1: Cơ C# Kiểu liệu Biến Biểu thức Khoảng trắng Câu lệnh Toán tử Namespace Các dẫn biên dịch Xử lý ngoại lệ 10 Bài tập Bài 2: Xây dựng lớp – Đối tƣợng Lớp đối tượng Sử dụng thành viên static Hủy đối tượng Truyền tham số nạp chồng phương thức Đóng gói liệu với thuộc tính Bài tập 11 14 14 15 24 28 28 29 38 40 40 46 50 51 59 61 Bài 3: Kế thừa – Đa hình 63 Đặc biệt hóa tổng qt hóa Sự kế thừa Đa hình Lớp trừu tượng Các lớp lồng Bài tập Bài 4: Nạp chồng toán tử Sử dụng từ khóa operator Hỗ trợ ngơn ngữ NET khác Sử dụng toán tử Toán tử so sánh Toán tử chuyển đổi Bài tập Bài 5: Cấu trúc Định nghĩa cấu trúc Tạo sử dụng cấu trúc Câu hỏi & tập 63 63 64 64 65 66 67 67 67 68 69 69 70 71 71 71 73 Bài 6: Thực thi giao diện Thực thi giao diện Truy cập phương thức giao diện Thực thi phủ giao diện Thực thi giao diện tường minh Bài tập Bài 7: Mảng Mảng Danh sách mảng Câu lệnh foreach Bài tập 74 74 76 76 76 77 80 80 81 81 81 Bài 8: Xử lý chuỗi 82 Lớp string Các biểu thức quy tắc Bài tập Các thuật ngữ chuyên môn Tài liệu tham khảo 82 84 85 87 87 GIÁO TRÌNH MƠ ĐUN Tên mơ đun: LẬP TRÌNH WINDOW Mã mơ đun: MĐ 22 I Vị trí, tính chất, ý nghĩa vai trị mơ đun: - Vị trí: Mơ đun thuộc nhóm mơ đun chun mơn Mô đun yêu cầu học qua kiến thức lập trình hướng đối tượng, cấu trúc liệu, bố trí học trước mơ đun lập trình Window - Tính chất: Đây mơ đun chứa đựng kiến thức tảng ngôn ngữ lập trình C#, mơ đun hỗ trợ cho hai mơ đun lập trình Window - Ý nghĩa vai trị mơ đun: Mơ đun tảng giúp người học có kiến thức để hỗ trợ cho lập trình Windows Form II Mục tiêu mô đun: - Kiến thức: Giải thích kiến thức tảng Microsoft NET Vận dụng kiến thức kỹ lập trình hướng đối tượng, xử lý mảng, chuỗi, chế ủy quyền sử dụng lớp sở NET - Kỹ năng: Lập trình Console - Năng lực tự chủ trách nhiệm: Hình thành thái độ làm việc cẩn thận, nghiêm túc III Nội dung mơ đun: Thời gian (giờ) Thực Số hành, thí Tên mô đun Tổng Lý Kiểm TT nghiệm, số thuyết tra thảo luận, tập Bài 1: Cơ C# 32 10 21 Bài 2: Xây dựng lớp – Đối tượng Bài 3: Kế thừa – Đa hình 4 Bài 4: Nạp chồng toán tử 12 Bài 5: Cấu trúc 2 Bài 6: Thực thi giao diện 12 Bài 7: Mảng 8 Bài 8: Xử lý chuỗi 2 Ôn tập 2 Cộng 90 30 57 Bài 1: CƠ BẢN VỀ C# Giới thiệu: Trong trước tìm hiểu chương trình C# đơn giản Chương trình chưa đủ để diễn tả chương trình viết ngơn ngữ C#, có q nhiều phần chi tiết bỏ qua Do sâu vào tìm hiểu cấu trúc cú pháp ngôn ngữ C# Bài thảo luận hệ thống kiểu liệu, phân biệt kiểu liệu xây dựng sẵn (như int, bool, string…) với kiểu liệu người dùng định nghĩa (lớp hay cấu trúc người lập trình tạo ) Một số khác lập trình tạo sử dụng biến liệu hay đề cập với cấu trúc liệt kê, chuỗi, định danh, biểu thức cậu lệnh Mục tiêu bài: Nhằm trang bị cho người học: - Kiến thức kiểu liệu dựng sẵn C# - Kiến thức kỹ việc sử dụng biến, biểu thức - Kiến thức khoảng trắng - Kiến thức không gian tên (namespace) - Kiến thức kỹ toán tử - Kiến thức dẫn biên dịch - Kiến thức kỹ việc sử dụng cấu trúc điều khiển Nội dung chính: Để bắt đầu cho việc tìm hiểu ngơn ngữ C# tạo tiền đề cho chương sau, chương trình bày chương trình C# đơn giản Đầu tiên bạn mở Visual Studio.Net 2008 chọn File-> New-> Project chọn ứng dụng Console Application Hình 1.1 Các bạn gõ tên ứng dụng vào ô text Name Chọn nơi lưu trữ ứng dụng cách Browse đến thư mục bạn muốn lưu Sau nhấn chọn OK cửa sổ soạn thảo ứng dụng xuất hiện, bạn soản thảo chương trình sau: Hình 1.2 Nhấn F5 sử dụng thực đơn (menu) Debug > Start Debugging để thực thi chương trình: Kết hiển thị sau: Hình 1.3 I/ KIỂU DỮ LIỆU C# chia thành hai tập hợp kiểu liệu chính: Kiểu xây dựng sẵn (built- in) mà ngôn ngữ cung cấp cho người lập trình kiểu người dùng định nghĩa(user-defined) người lập trình tạo C# phân tập hợp kiểu liệu thành hai loại: Kiểu liệu giá trị (value) kiểu liệu tham chiếu (reference) Bảng kiểu liệu xây dựng sẵn Ghi chú: Tất kiểu liệu xây dựng sẵn kiểu liệu giá trị ngoại trừ đối tượng chuỗi Và tất kiểu người dùng định nghĩa ngoại trừ kiểu struct kiểu liệu tham chiếu học tìm hiểu kiểu xây dựng sẵn Kiểu liệt kê Kiểu liệt kê đơn giản tập hợp tên có giá trị khơng thay đổi (thường gọi danh sách liệt kê) Ví dụ có hai biểu tượng có quan hệ với nhau: const int DoDong = 0; const int DoSoi = 100; Do mục đích mở rộng ta mong muốn thêm số số khác vào danh sách trên, sau: const int DoNong = 60; const int DoAm = 40; const int DoNguoi = 20; Các biểu tượng điều có ý nghĩa quan hệ với nhau, nói nhiệt độ nước, khai báo cồng kềnh khơng liên kết chặt chẽ cho Thay vào C# cung cấp kiểu liệt kê để giải vấn đề trên: enum NhietDoNuoc { DoDong = 0, DoNguoi = 20, DoAm = 40, DoNong = 60, DoSoi = 100, } Mỗi kiểu liệt kê có kiểu liệu sở, kiểu liệu kiểu liệu nguyên int, short, long nhiên kiểu lịêu liệt kê không chấp nhận kiểu ký tự Để khai báo kiểu liệt kê ta thực theo cú pháp sau: [thuộc tính] [bổ sung] enum [:kiểu sở] {danh sách thành phần liệt kê}; Thành phần thuộc tính bổ sung tự chọn trình bày phần sau sách Trong phần tập trung vào phần lại khai báo Một kiểu liệt kê bắt đầu với từ khóa enum, tiếp sau định danh cho kiểu liệt kê: enum NhietDoNuoc Thành phần kiểu sở kiểu khai báo cho mục kiểu liệt kê Nếu bỏ qua thành phần trình biên dịch gán giá trị mặc định kiểu nguyên int, nhiên sử dụng kiểu nguyên ushort hay long, ngoại trừ kiểu ký tự Đoạn ví dụ sau khai báo kiểu liệt kê sử dụng kiểu sở số nguyên không dấu uint: enum KichThuoc :uint { Nho = 1, Vua = 2, Lon = 3, } Lưu ý khai báo kiểu liệt kê phải kết thúc danh sách liệt kê, danh sách liệt kê phải có gán, thành phần phải phân cách dấu phẩy Ta viết lại ví dụ minh sau 1.1: Sử dụng kiểu liệt kê để đơn giản chương trình class MinhHoaC3 { // Khai báo kiểu liệt kê enum NhietDoNuoc { DoDong = 0, DoNguoi = 20, DoAm = 40, DoNong = 60, DoSoi = 100, } static void Main() { System.Console.WriteLine( “Nhiet dong: {0}”, NhietDoNuoc.DoDong); System.Console.WriteLine( “Nhiet nguoi: {0}”, NhietDoNuoc.DoNguoi); System.Console.WriteLine( “Nhiet am: {0}”, NhietDoNuoc.DoAm); System.Console.WriteLine( “Nhiet nong: {0}”, NhietDoNuoc.DoNong); System.Console.WriteLine( “Nhiet soi: {0}”, NhietDoNuoc.DoSoi); } } Nhiet dong: Nhiet nguoi: 20 Nhiet am: 40 Nhiet nong: 60 Nhiet soi: 100 Mỗi thành phần kiểu liệt kê tương ứng với giá trị số, trường hợp số nguyên Nếu không khởi tạo cho thành phần chúng nhận giá trị với thành phần Ta xem thử khai báo sau: enum Thutu { ThuNhat, ThuHai, ThuBa = 10, ThuTu } Khi giá trị ThuNhat 0, giá trị ThuHai 1, giá trị ThuBa 10 giá trị ThuTu 11 Kiểu liệt kê kiểu hình thức bắt buộc phải thực phép chuyển đổi tường minh với kiêu giá trị nguyên: int x = (int) ThuTu.ThuNhat; Kiểu chuỗi ký tự Kiểu liệu chuỗi thân thiện với người lập trình ngơn ngữ lập trình nào, kiểu liệu chuỗi lưu giữ mảng ký tự Để khai báo chuỗi sử dụng từ khoá string tương tự cách tạo thể đối tượng nào: 10 */ Và ta thay dịng lệnh hàm Main() tạo Location có hai tham số câu lệnh tạo không tham số sau: //Location loc1 = new Location( 200, 300) Location loc1 = new Location(); Bởi lúc khơng có phương thức khởi dựng khai báo, phương thức khởi dựng ngầm định gọi Kết thực giống sau: Loc1 location 0, In myFunc loc: 50, 100 Loc1 location: 0, Bộ khởi tạo mặc định thiết lập tất biến thành viên với giá trị Tạo cấu trúc không gọi new Bởi Location cấu trúc khơng phải lớp, thể tạo stack Trong ví dụ toán tử new gọi: Location loc1 = new Location( 200, 300); Kết đối tượng Location tạo stack Tuy nhiên, toán tử new gọi khởi dựng lớp Location, không giống với lớp, cấu trúc tạo mà khơng cần phải gọi toán tử new Điều giống biến kiểu liệu xây dựng sẵn (như int, long, char, ) tạo Ghi chú: Đây khuyến cáo, ví dụ sau minh họa cách tạo cấu trúc mà khơng phải sử dụng tốn tử new có khác C# ngôn ngữ C++ khác cách ngơn ngữ C# đối xử với lớp khác cấu trúc Tuy nhiên, việc tạo cấu trúc mà không dùng từ khóa new khơng có lợi tạo chương trình khó hiểu, tiềm ẩn nhiều lỗi, khó trì III/ CÂU HỎI & BÀI TẬP Bài tập 1: Xây dựng cấu trúc phân số với liệu thành viên tử số mẫu số, xây dựng hàm cộng, trừ, nhân, chia để thực phép toán hai phân số Bài tập 2: Xây dựng cấu trúc sinh viên 73 Bài 6: THỰC THI GIAO DIỆN Giới thiệu: Giao diện ràng buộc, giao ước đảm bảo cho lớp hay cấu trúc thực điều Khi lớp thực thi giao diện, lớp báo cho thành phần client biết lớp có hỗ trợ phương thức, thuộc tính, kiện mục khai báo giao diện Trong chương thảo luận cách tạo, thực thi sử dụng giao diện Ngoài bàn tới cách thực thi nhiều giao diện với cách kết hợp mở rộng giao diện Mục tiêu bài: Nhằm trang bị cho người học: - Kiến thức kỹ thực thi giao diện - Kiến thức kỹ thành phần giao diện mở rộng giao diện Nội dung chính: I/ THỰC THI GIAO DIỆN Cú pháp để định nghĩa giao diện sau: [thuộc tính] [bổ sung truy cập] interface [: danh sách sở] { } Phần thuộc tính đề cập sau Thành phần bổ sung truy cập bao gồm: public, private, protected, internal, protected internal, ý nghĩa tương tự bổ sung truy cập lớp Theo sau từ khóa interface tên giao diện Thông thường tên giao diện bắt đầu với từ I hoa (điều không bắt buộc việc đặt tên rõ ràng dễ hiểu, tránh nhầm lẫn với thành phần khác) Ví dụ số giao diện có tên sau: IStorable, ICloneable, Danh sách sở danh sách giao diện mà giao diện mở rộng, phần trình bày phần thực thi nhiều giao diện chương Phần thân giao diện phần thực thi giao diện trình bày bên Giả sử muốn tạo giao diện nhằm mô tả phương thức thuộc tính lớp cần thiết để lưu trữ truy cập từ sở liệu hay thành phần lưu trữ liệu khác tập tin Chúng ta định gọi giao diện IStorage Trong giao diện xác nhận hai phương thức: Read() Write(), khai báo xuất phần thân giao diện sau: interface IStorable { void Read(); void Write(object); } Mục đích giao diện để định nghĩa khả mà 74 muốn có lớp Ví dụ, tạo lớp tên Document, lớp lưu trữ liệu sở liệu, định lớp này thực thi giao diện IStorable Để làm điều này, sử dụng cú pháp giống việc tạo lớp Document thừa kế từ IStorable dùng dấu hai chấm (:) theo sau tên giao diện: public class Document : IStorable { public void Read() { } public void Write() { } } Thực thi nhiều giao diện Trong ngôn ngữ C# cho phép thực thi nhiều giao diện Ví dụ, lớp Document lưu trữ liệu nén Chúng ta chọn thực thi hai giao diện IStorable ICompressible Như phải thay đổi phần khai báo danh sách sở để hai giao diện điều thực thi, sử dụng dấu phẩy (,) để phân cách hai giao diện: public class Document : IStorable, ICompressible Mở rộng giao diện C# cung cấp chức cho mở rộng giao diện có cách thêm phương thức thành viên hay bổ sung cách làm việc cho thành viên Ví dụ, mở rộng giao diện ICompressible với giao diện ILoggedCompressible Giao diện mở rộng giao diện cũ cách thêm phương thức ghi log liệu lưu: interface ILoggedCompressible : ICompressible { void LogSavedBytes(); } Kết hợp giao diện Một cách tương tự, tạo giao diện cách kết hợp giao diện cũ ta thêm phương thức hay thuộc tính cho giao diện Ví dụ, định tạo giao diện IStorableCompressible Giao diện kết hợp phương thức hai giao diện thêm vào phương thức để lưu trữ kích thước nguyên thuỷ liệu trước nén: interface IStorableCompressible : IStoreable, ILoggedCompressible { void LogOriginalSize(); } 75 II/ TRUY CẬP PHƢƠNG THỨC GIAO DIỆN Chúng ta truy cập thành viên giao diện IStorable thể thành viên lớp Document: Document doc = new Document(“Test Document”); doc.status = -1; doc.Read(); Hay ta tạo thể giao diện cách gán đối tượng Document cho kiểu liệu giao diện, sau sử dụng giao diện để truy cập phương thức: IStorable isDoc = (IStorable) doc; isDoc.status = 0; isDoc.Read(); Ghi chú: Cũng nói trước đây, tạo thể giao diện cách trực tiếp Do khơng thể thực sau: IStorable isDoc = new IStorable(); Tuy nhiên tạo thể lớp thực thi sau: Document doc = new Document(“Test Document”); Sau tạo thể giao diện cách gán đối tượng thực thi đến kiểu liệu giao diện, trường hợp IStorable: IStorable isDoc = (IStorable) doc; Chúng ta kết hợp bước sau: IStorable isDoc = (IStorable) new Document(“Test Document”); Nói chung, cách thiết kế tốt định truy cập phương thức giao diện thông qua tham chiếu giao diện Do cách tốt sử dụng isDoc.Read(), sử dụng doc.Read() ví dụ trước Truy cập thơng qua giao diện cho phép đối xử giao diện cách đa hình Nói cách khác, tạo hai hay nhiều lớp thực thi giao diện, sau cách truy cập lớp thông qua giao diện III/ THỰC THI PHỦ QUYẾT GIAO DIỆN Khi thực thi lớp tự đánh dấu hay tất phương thức thực thi giao diện phương thức ảo Ví dụ, lớp Document thực thi giao diện IStorable đánh dấu phương thức Read() Write() phương thức ảo Lớp Document đọc viết nội dung vào kiểu liệu File Những người phát triển sau dẫn xuất kiểu liệu từ lớp Document, lớp Note hay lớp EmailMessage, người mong muốn lớp Note đọc viết vào sở liệu vào tập tin IV/ THỰC THI GIAO DIỆN TƢỜNG MINH Trong việc thực thi giao diện giờ, lớp thực thi (trong trường hợp Document) tạo phương thức thành viên ký hiệu kiểu trả phương thức mô tả giao diện Chúng ta không cần thiết khai báo tường minh thực thi giao diện, việc hiểu ngầm trình biên dịch Tuy nhiên, có vấn đề xảy lớp thực thi hai giao diện hai giao 76 diện có phương thức ký hiệu Ví dụ tạo hai giao diện: IStorable ITalk Sau thực thi phương thức Read() giao diện ITalk để đọc tiếng nội dung sách Không may phương thức tranh chấp với phương thức Read() IStorable mà Document phải thực thi Bởi hai phương thức IStorable ITalk có phương thức Read(), việc thực thi lớp Document phải sử dụng thực thi tường minh cho phương thức Với việc thực thi tường minh, lớp thực thi Document khai báo tường minh cho phương thức: void ITalk.Read(); Điều giải việc tranh chấp, tạo hàng loạt hiệu ứng thú vị Đầu tiên, không cần thiết sử dụng thực thi tường minh với phương thức khác Talk: public void Talk(); Vì khơng có tranh chấp ta khai báo thông thường Điều quan trọng phương thức thực thi tường minh khơng có bổ sung truy cập: void ITalk.Read(); Phương thức hiểu ngầm public Thật vậy, phương thức khai báo tường minh khơng khai báo với từ khóa bổ sung truy cập: abstract, virtual, override, new Một địều quan trọng khác truy cập phương thức thực thi tường minh thơng qua đối tượng Khi viết: theDoc.Read(); Trình biên dịch hiểu thực thi phương thức giao diện ngầm định cho IStorable Chỉ cách truy cập phương thức thực thi tường minh thông qua việc gán cho giao diện để thực thi: ITalk itDoc = theDoc as ITalk; if ( itDoc != null ) { itDoc.Read(); } V/ BÀI TẬP Bài tập 1: Hãy viết giao diện khai báo thuộc tính ID chứa chuỗi giá trị Viết lớp Employee thực thi giao diện Bài tập 2: Đọan mã nguồn sau có lỗi sử lỗi cho biết có lỗi Sau sửa lỗi viết lớp Circle thực thi giao diện này? public interface IDimensions { long width; long height; double Area(); double Circumference(); int Side(); } Bài tập 3: Chương trình sau có lỗi sử lỗi, biên dịch chạy lại 77 chương trình? Giải thích chương trình có lỗi using System; interface IPoint { // Property signatures: int x { get; set; } int y { get; set; } } class MyPoint : IPoint { // Fields: private int myX; private int myY; // Constructor: public MyPoint(int x, int y) { myX = x; myY = y; } // Property implementation: public int x { get { return myX; } set { myX = value; } } public int y { get { return myY; 78 } set { myY = value; } } } class MainClass { private static void PrintPoint(IPoint p) { Console.WriteLine("x={0}, y={1}", p.x, p.y); } public static void Main() { MyPoint p = new MyPoint(2,3); Console.Write("My Point: "); PrintPoint(p); IPoint p2 = new IPoint(); PrintPoint(p2); } } Bài tập 4: Xây dựng giao diện IDisplay có khai báo thuộc tính Name kiểu chuỗi Hãy viết hai lớp Dog Cat thực thi giao diện IDisplay, cho biết thuộc tính Name tên đối tượng 79 Bài 7: MẢNG Giới thiệu: Môi trường NET cung cấp đa dạng số lượng lớp tập hợp, bao gồm: Array, ArrayList, Queue, Stack, BitArray, NameValueCollection, StringCollection Trong số tập hợp đơn giản Array, kiểu liệu tập hợp mà ngôn ngữ C# hỗ trợ xây dựng sẵn Chương tìm hiểu cách làm việc với mảng Mục tiêu bài: Nhằm trang bị cho người học: - Kiến thức kỹ việc sử dụng mảng, danh sách mảng - Kỹ giải số tập mảng Nội dung bài: I/ MẢNG Mảng tập hợp có thứ tự đối tượng, tất đối tượng kiểu Mảng ngơn ngữ C# có vài khác biệt so với mảng ngôn ngữ C++ số ngơn ngữ khác, chúng đối tượng Điều cung cấp cho mảng sử dụng phương thức thuộc tính Ngôn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo đối tượng Array Tuy nhiên, thật tạo đối tượng kiểu System.Array Mảng ngôn ngữ C# kết hợp cú pháp khai báo mảng theo kiểu ngôn ngữ C kết hợp với định nghĩa lớp thể mảng truy cập phương thức thuộc tính System.Array Khai báo mảng Chúng ta khai báo mảng C# với cú pháp theo sau: [] Ví dụ ta có khai báo sau: int[] myIntArray; Cặp dấu ngoặc vuông ([]) báo cho trình biên dịch biết khai báo mảng Kiểu liệu kiểu thành phần chứa bên mảng Trong ví dụ bên trên, myIntArray khai báo mảng số nguyên Chúng ta tạo thể mảng cách sử dụng từ khóa new sau: myIntArray = new int[6]; Khai báo thiết lập bên nhớ mảng chứa sáu số nguyên Giá trị mặc định Khi tạo mảng có kiểu liệu giá trị, thành phần chứa giá trị mặc định kiểu liệu Với khai báo: myIntArray = new int[5]; tạo mảng năm số nguyên, thành phần thiết lập giá trị mặc định 0, giá trị mặc định số nguyên Không giống với mảng kiểu liệu giá trị, kiểu tham chiếu mảng không khởi tạo giá trị mặc định Thay vào đó, chúng khởi tạo giá trị null Nếu cố truy cập đến thành phần mảng kiểu liệu 80 tham chiếu trước chúng khởi tạo giá trị xác định, tạo ngoại lệ Truy cập thành phần mảng Để truy cập vào thành phần mảng ta sử dụng tốn tử mục ([]) Mảng dùng sở 0, mục thành phần mảng luôn Như ví dụ trước thành phần myArray[0] II/ DANH SÁCH MẢNG Khởi tạo thành phần mảng Chúng ta khởi tạo nội dung mảng lúc tạo thể mảng cách đặt giá trị bên dấu ngoặc ({}) C# cung cấp hai cú pháp để khởi tạo thành phần mảng, cú pháp dài cú pháp ngắn: int[] myIntArray = new int[5] { 2, 4, 6, 8, 10}; int[] myIntArray = { 2, 4, 6, 8, 10}; III/ CÂU LỆNH LẶP FOREACH Câu lệnh lặp foreach với người học ngôn ngữ C, từ khóa sử dụng ngơn ngữ Visual Basic Câu lệnh foreach cho phép lặp qua tất mục mảng hay tập hợp Cú pháp sử dụng lệnh lặp foreach sau: foreach ( in ) { // thực thông qua tương ứng với // mục mảng hay tập hợp } IV/ BÀI TẬP Bài tập 1: Viết chương trình tạo mảng chiều nguyên chứa giá trị ngẫu nhiên Sắp xếp thành phần mảng theo thứ tự tăng dần hiển thị kết Làm tương tự với trường hợp xếp mảng theo thứ tự giảm dần Bài tập 2: Viết chương trình tạo mảng chiều nguyên chứa giá trị ngẫu nhiên Sắp xếp chúng theo thứ tự số âm tăng cịn số dương giảm dần Hiển thị kết hình Bài tập 3: Viết chương trình tạo mảng lưu trữ 30 điểm số học sinh Tính trung bình điểm tất học sinh Xuất kết điểm điểm trung bình 81 Bài 8: XỬ LÝ CHUỖI Giới thiệu: Ngôn ngữ C# hỗ trợ đầy đủ chức kiểu chuỗi mà thấy ngơn ngữ lập trình cấp cao khác Điều quan trọng ngôn ngữ C# xem chuỗi đối tượng đóng gói tất thao tác, xếp, phương thức tìm kiếm thường áp dụng cho chuỗi ký tự Trong học cách làm việc với kiểu liệu string ngôn ngữ C#, kiểu string alias lớp System.String NET Framework Chúng ta thấy cách rút trích chuỗi con, thao tác nối chuỗi, xây dựng chuỗi với lớp StringBuilder Thêm vào đó, học cách sử dụng lớp Regex để so khớp chuỗi dựa biểu thức quy tắc phức tạp Mục tiêu bài: Nhằm trang bị cho người học: Kiến thức kỹ sử dụng lớp dựng sẵn string C# Nội dung chính: I/ LỚP STRING C# xem chuỗi kiểu liệu tức lớp linh hoạt, mạnh mẽ, dễ sử dụng Mỗi đối tượng chuỗi dãy cố định ký tự Unicode Nói cách khác, phương thức dùng để làm thay đổi chuỗi thực trả thay đổi, chuỗi nguyên thủy không thay đổi Khi khai báo chuỗi C# cách dùng từ khóa string, khai báo đối tượng lớp System.String, kiểu liệu xây dựng sẵn cung cấp thư viện lớp NET (.NET Framework Class Library) Do kiểu liệu chuỗi C# kiểu liệu System.String, suốt dùng hai tên hoán đổi lẫn Khai báo lớp System.String sau: public sealed class String : IComparable, ICloneble, IConvertible Khai báo cho thấy lớp String đóng dấu khơng cho phép kế thừa, khơng thể dẫn xuất từ lớp Lớp thực thi ba giao diện hệ thống IComparable, ICloneable, IConvertible – giao diện cho phép lớp System.String chuyển đổi với lớp khác hệ thống NET Như xem trước, giao diện IComparable thực thi kiểu liệu xếp Ví dụ chuỗi theo cách xếp Alphabe, chuỗi đưa so sánh với chuỗi khác để chuỗi có thứ tự trước Những lớp IComparable thực thi phương thức CompareTo() Những đối tượng ICloneable tạo thể khác với giá trị thể nguyên thuỷ Do ta tạo chuỗi từ chuỗi ban đầu giá trị chuỗi với chuỗi ban đầu Những lớp ICloneable thực thi phương thức Clone() Những lớp IConvertible cung cấp phương thức để dễ dàng chuyển đổi qua 82 kiểu liệu khác ToInt32(), ToDouble(), ToDecimal(), Tạo chuỗi Cách phổ biến để tạo chuỗi gán cho chuỗi trích dẫn tức chuỗi nằm dấu ngoặc kép, kiểu chuỗi biết chuỗi hằng, khai báo sau: string newString = “Day la chuoi hang”; Những chuỗi trích dẫn thêm ký tự escape, “\n” hay “\t”, ký tự bắt đầu với dầu chéo ngược (“\”), ký tự dùng để vị trí xuống dịng hay tab xuất Bởi dấu gạch chéo ngược dùng vài cú pháp dòng lệnh, địa URLs hay đường dẫn thư mục, chuỗi trích dẫn dấu chéo ngược phải đặt trước dấu chéo ngược khác, tức dùng hai dấu chéo ngược trường hợp Tạo chuỗi dùng phương thức ToString đối tượng Một cách phổ biến khác để tạo chuỗi gọi phương thức ToString() đối tượng gán kết đến biến chuỗi Tất kiểu liệu phủ phương thức đơn giản chuyển đổi giá trị (thông thường giá trị số) đến chuỗi thể giá trị Trong ví dụ theo sau, phương thức ToString() kiểu liệu int gọi để lưu trữ giá trị chuỗi: int myInt = “9”; string intString = myInt.ToString(); Phương thức myInt.ToString() trả đối tượng String đối tượng gán cho intString Thao tác chuỗi Lớp string cung cấp nhiều số lượng phương thức để so sánh, tìm kiếm thao tác chuỗi, phương thức trình bày bảng sau: 83 II/ CÁC BIỂU THỨC QUY TẮT Biểu thức qui tắc ngôn ngữ mạnh dùng để mô tả thao tác văn Một biểu thức qui tắc thường áp dụng cho chuỗi, hay tập hợp ký tự Thông thường chuỗi toàn văn hay tài liệu Kết việc áp dụng biểu thức qui tắc đến chuỗi trả chuỗi trả chuỗi bổ sung từ vài phần chuỗi nguyên thủy ban đầu Chúng ta nên nhớ string khơng thể thay đổi khơng thể thay đổi biểu thức qui tắc Bằng cách áp dụng xác biểu thức qui tắc cho chuỗi sau: Mot, hai, ba, Trung Tam Dao Tao CNTT Chúng ta trả hay tất danh sách chuỗi (Mot, hai, ) tạo phiên chuỗi bổ sung chuỗi (như : TrUng TAM, ) Biểu thức qui tắc định cú pháp ký tự qui tắc thân Một biểu thức qui tắc bao gồm hai kiểu ký tự: Ký tự bình thường (literal): ký tự mà sử dụng để so khớp với chuỗi ký tự đích Metacharacter: biểu tượng đặc biệt, có hành động lệnh phân tích (parser) biểu thức 84 Sử dụng biểu thức quy tắc qua lớp Regex MS.NET cung cấp hướng tiếp cận hướng đối tượng (object- oriented approad) cho biểu thức quy tắc để so khớp, tìm kiếm thay chuỗi Biểu thức quy tắc ngôn ngữ C# xây dựng từ lớp regexp ngôn ngữ Perl5 Namspace System.Text.RegularExpressions thư viện BCL (Base Class Library) chứa đựng tất đối tượng liên quan đến biểu thức quy tắc môi trường NET Và lớp quan trọng mà biểu thức quy tắc hỗ trợ Regex Sử dụng Regex để tìm kiếm tập hợp Hai lớp thêm vào namespace NET cho phép thực việc tìm kiếm chuỗi cách lập lặp lại hết chuỗi, kết trả tập hợp Tập hợp trả có kiểu MatchCollection, bao gồm khơng có hay nhiều đối tượng Match Sử dụng Regex để gom nhóm Đơi lập trình cần gom nhóm số biểu thức tương tự với theo quy định Ví dụ cần tìm kiếm địa IP nhóm chúng lại vào nhóm IPAddresses tìm thấy đâu chuỗi Lớp Group cho phép tạo nhóm tìm kiếm dựa biểu thức quy tắc, thể kết từ nhóm biểu thức đơn Một biểu thức nhóm định rõ nhóm cung cấp biểu thức quy tắc, chuỗi so khớp biểu thức quy tắc thêm vào nhóm Ví dụ, để tạo nhóm viết sau: @”(?(\d|\ )+)\s” III/ BÀI TẬP Bài tập 1: Viết chương trình cho phép người dùng nhập vào chuỗi Sau đếm số ký tự xuất ký tự chuỗi ví dụ sau: ‘a’ : ‘g’ : ‘2’ : Bài tập 2: Viết chương trình tìm chuỗi chuỗi cho trước Chương trình cho phép người dùng nhập vào chuỗi, chuỗi cần tìm Kết chuỗi có tìm thấy hay khơng, tìm thấy đưa vị trí tìm thấy Bài tập 3: Viết chương trình tìm số lần xuất chuỗi chuỗi cho trước Chương trình cho phép người dùng nhập vào chuỗi chuỗi cần đếm Kết hiển thị chuỗi, chuỗi vị trí mà chuỗi xuất chuỗi Bài tập 4: Viết chương trình cho phép người dùng nhập vào chuỗi, thực việc đảo ký tự chuỗi theo thứ tự ngược lại Bài tập 5: Viết chương trình cắt từ có nghĩa câu Ví dụ cho từ: “Thuc hanh lap trinh” cắt thành chữ: “Thuc”, “hanh”, “lap”, “trinh” Bài tập 6: Hãy viết chương trình sử dụng biểu thức quy tắc để lấy chuỗi ngày/tháng/năm chuỗi cho trước? Cho phép người dùng nhập vào 85 chuỗi dùng biểu thức quy tắc vừa tạo thực việc tìm kiếm Bài tập 7: Hãy viết chương trình sử dụng biểu thức quy tắc để lấy thời gian giờ:phút:giây chuỗi cho trước? 86 CÁC THUẬT NGỮ CHUYÊN MÔN CLS VS ADO CSDL ASCII GUI MDI Common Language Specification Visual Studio Microsoft ActiveX Data Objects Cơ sở liệu Bảng mã ASCII Giao diện đồ họa Multiple Document Interface TÀI LIỆU THAM KHẢO 1/ C# 2005 – Lập trình Nhà xuất lao động xã hội 2/ MSDN Library 3/ Programming C# Tác giả: Jesse Liberty Nhà xuất bản: O‟Reilly 4/ C# in 21 days Tác giả: Bradley L.Jones Nhà xuất bản: SAMS 87 ... i++) { if (i %10 ==0) { Console.WriteLine(“{0} ”,i); } else { Console.Write(“{0} ”,i); } } return 0; } } 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25... ThoiGian t1 = new ThoiGian( currentTime ); t1.ThoiGianHienHanh(); ThoiGian t2 = new ThoiGian(20 01, 7,3 ,10 ,5); t2.ThoiGianHienHanh(); } } 44 Hien tai: Thoi Gian:... THIỆU “LẬP TRÌNH WINDOW 1? ?? mođul đƣợc bố trí trƣớc mơn học Lập trình window 2, với yêu cầu ngƣời học phải có kiến thức cấu trúc liệu, lập trình hƣớng đối tƣợng Với chƣơng trình mơn học 90 giờ, giáo