Như nó bên trên, thao tác thường xuyên thực hiện trên một chuỗi là tìm kiếm chuỗi con thỏa quy tắc nào đó. Một ngôn ngữ nếu mạnh về thao tác trên chuỗi, chắc chắn phải cung cấp nhiều phương thức thao tác tốt để tìm kiếm các chuỗi con theo quy tắc. Ngôn ngữ C# cũng rất mạnh về điểm này, do chúng thừa hưởng từ các lớp thao tác trên chuỗi của . NET.
Ngơn Ngữ Lập Trình C# Trả lời 3: Như bên trên, thao tác thường xuyên thực chuỗi tìm kiếm chuỗi thỏa quy tắc Một ngơn ngữ mạnh thao tác chuỗi, chắn phải cung cấp nhiều phương thức thao tác tốt để tìm kiếm chuỗi theo quy tắc Ngôn ngữ C# mạnh điểm này, chúng thừa hưởng từ lớp thao tác chuỗi NET Câu hỏi thêm Câu hỏi 1: Có cách tạo chuỗi ngơn ngữ C#? Câu hỏi 2: Chuỗi Verbatim chuỗi nào? Hãy cho vài ví dụ minh họa chuỗi diễn giải ý nghĩa chúng? Câu hỏi 3: Sự khác chuỗi tạo từ đối tượng string StringBuilder? Câu hỏi 4: Khi nên dùng chuỗi tạo từ lớp string StringBuilder? Câu hỏi 5: Một biểu thức quy tắc có kiểu ký tự? Câu hỏi 6: Một biểu thức quy tắc sau so khớp điều gì? ^(Name|Address|Phone|Fax): 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 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? Chương trình cho phép người dùng nhập vào chuỗi dùng biểu thức quy tắc vừa tạo để thực việc tìm kiếm 303 Xử Lý Chuỗi Ngơn Ngữ Lập Trình C# Chương 11 CƠ CHẾ ỦY QUYỀN - SỰ KIỆN Ủ y quyền Sử dụng ủy quyền để xác nhận phương thức lúc thực thi Ủ y quyền tĩnh Dùng ủy quyền thuộc tính Thiết lập thứ tự thi hành với mảng ủy quyền Muticasting Sự kiện Cơ chế publishing – subscribing Sự kiện & ủy quyền Câu hỏi & tập Trong lập trình thường đối diện với tình muốn thực hành động đó, chưa xác định xác phương thức hay kiện đối tượng Ví dụ nút lệnh button biết phải thơng báo cho vài đối tượng nhấn, khơng biết đối tượng hay nhiều đối tượng cần thông báo Tốt việc nối nút lệnh với đối tượng cụ thể, kết nối nút lệnh đến chế ủy quyền sau thực việc ủy quyền đến phương thức cụ thể thực thi chương trình Trong thời kỳ đầu máy tính, chương trình thực theo trình tự xử lý bước hoàn thành, người dùng thực tương tác làm hạn chế điều khiển hoạt động khác chương trình tương tác với người dùng chấm dứt Tuy nhiên, ngày với mơ hình lập trình giao diện người dùng đồ họa (GUI: Graphical User Interface) đòi hỏi cách tiếp cận khác, biết lập trình điều khiển kiện (event-driven programming) Chương trình đại đưa giao diện tương tác với người dùng sau chờ cho người sử dụng kích hoạt hành động Người sử dụng thực nhiều hành động khác như: chọn mục chọn menu, nhấn nút lệnh, cập nhật ô chứa văn bản, Mỗi hành động dẫn đến 304 Cơ Chế Ủy Quyền - Sự Kiện Ngơn Ngữ Lập Trình C# kiện (event) sinh Một số kiện khác xuất mà khơng cần hành động trực tiếp người dùng Các kiện xuất thiết bị đồng hồ máy tính phát theo chu kỳ thời gian, thư điện tử nhận, hay đơn giản báo hành động chép tập tin hoàn thành, Một kiện đóng gói ý tưởng “chuyện xảy ra” chương trình phải đáp ứng lại với kiện Cơ chế kiện ủy quyền gắn liền với nhau, kiện xuất cần phải phân phát kiện đến trình xử lý kiện tương ứng Thơng trường trình xử lý kiện thực thi C# ủy quyền Ủ y quyền cho phép lớp yêu cầu lớp khác làm cơng việc đó, thực cơng việc phải báo cho lớp biết Ủy quyền co thể sử dụng để xác nhận phương thức biết lúc thực thi chương trình, tìm hiểu kỹ vấn đề phần chương Ủ y quyền (delegate) Trong ngôn ngữ C#, ủy quyền lớp đối tượng (first-class object), hỗ trợ đầy đủ ngơn ngữ lập trình Theo kỹ thuật ủy quyền kiểu liệu tham chiếu dùng để đóng gói phương thức với tham số kiểu trả xác định Chúng ta đóng gói phương thức thích hợp vào đối tượng ủy quyền Trong ngôn ngữ C++ ngơn ngữ khác, làm điều cách sử dụng trỏ hàm (function pointer) trỏ đến hàm thành viên Không giống trỏ hàm C/C++, ủy quyền hướng đối tượng, kiểu liệu an toàn (type-safe) bảo mật Một điều thú vị hữu dụng ủy quyền khơng cần biết khơng quan tâm đến lớp đối tượng mà tham chiếu tới Điều cần quan tâm đến đối tượng đối mục phương thức kiểu trả phải phù hợp với đối tượng ủy quyền khai báo Để tạo ủy quyền ta dùng từ khóa delegate theo sau kiểu trả tên phương thức ủy quyền đối mục cần thiết: public delegate int WhichIsFirst(object obj1, object obj2); Khai báo định nghĩa ủy quyền tên WhichIsFirst, đóng gói phương thức lấy hai tham số kiểu object trả giá trị int Một mà ủy quyền định nghĩa, đóng gói phương thức thành viên việc tạo thể ủy quyền này, truyền vào phương thức có khai báo kiểu trả đối mục cần thiết Lưu ý: Từ phần sau quy ước sử dụng qua lại hai từ uỷ quyền delegate với Sử dụng ủy quyền để xác nhận phương thức lúc thực thi Ủ y quyền biết dùng để xác định loại phương thức dùng để xử lý kiện để thực callback chương trình ứng dụng Chúng 305 Cơ Chế Ủy Quyền - Sự Kiện Ngơn Ngữ Lập Trình C# sử dụng để xác định phương thức tĩnh instance phương thức mà trước chương trình thực Giả sử minh họa sau, muốn tạo lớp chứa đơn giản gọi Pair lớp lưu giữ xếp hai đối tượng truyền vào cho chúng Tạm thời lúc biết loại đối tượng mà Pair lưu giữ Nhưng cách tạo phương thức bên đối tượng thực việc xếp ủy quyền, ủy quyền thực việc thứ tự cho thân đối tượng Những đối tượng khác xếp khác Ví dụ, Pair chứa đối tượng đếm xếp theo thứ tự số, Pair nút lệnh button theo thứ tự alphabe tên chúng Mong muốn người tạo lớp Pair đối tượng bên Pair phải có trách nhiệm cho biết thứ tự chúng thứ tự thứ hai Để làm điều này, phải đảm bảo đối tượng bên Pair phải cung cấp phương thức cho biết cách xếp đối tượng Chúng ta định nghĩa phương thức yêu cầu việc tạo ủy quyền, ủy quyền định nghĩa ký pháp kiểu trả phương thức đối tượng (như button) để cung cấp cho phép Pair xác định đối tượng đến trước đối tượng thứ hai Lớp Pair định nghĩa ủy quyền, WhichIsFirst Phương thức Sort lấy tham số thể WhichIsFirst Khi đối tượng Pair cần biết thứ tự đối tượng bên u cầu ủy quyền truyền vào hai đối tượng chứa tham số Trách nhiệm việc xác định thứ tự hai đối tượng trao cho phương thức đóng gói ủy quyền Để kiểm tra thực chế ủy quyền, tạo hai lớp, lớp Cat lớp Student Hai lớp có điểm chung với nhau, ngoại trừ hai thực thi phương thức đóng gói WhichIsFirst Do hai đối tượng lưu giữ bên đối tượng Pair Trong chương trình thử nghiệm tạo hai đối tượng Student hai đối tượng Cat lưu chúng vào đối tượng Pair Sau tạo đối tượng ủy quyền để đóng gói phương thức chúng, phương thức phải phù hợp với ký pháp kiểu trả ủy quyền Sau yêu cầu đối tượng Pair xếp đối tượng Student Cat, ta làm bước sau: Bắt đầu việc tạo phương thức khởi dựng Pair lấy hai đối tượng đưa chúng vào mảng riêng: public class Pair { // đưa vào đối tượng theo thứ tự public Pair( object firstObjectr, object secondObject) { thePair[0] = firstObject; 306 Cơ Chế Ủy Quyền - Sự Kiện Ngơn Ngữ Lập Trình C# thePair[1] = secondObject; } // biến lưu giữ hai đối tượng private object[] thePair = new object[2]; } Tiếp theo phủ phương thức ToString() để chứa giá trị hai đối tượng mà Pair nắm giữ: public override string ToString() { // xuất thứ tự đối tượng thứ trước đối tượng thứ hai return thePair[0].ToString() +”,” + thePair[1].ToString(); } Bây có hai đối tượng bên Pair xuất giá trị chúng hình Tiếp tục thực việc xếp in kết xếp Hiện khơng xác định loại đối tượng mà có, ủy quyền định thứ tự xếp cho thân đối tượng mà Pair lưu giữ bên Do vậy, yêu cầu đối tượng lưu giữ bên Pair thực việc kiểm tra xem đối tượng trước Phương thức lấy hai tham số đối tượng trả giá trị kiểu liệt kê: theFirstComeFirst đối tượng đến trước theSecondComeFirst giá trị thứ hai đến trước Những phương thức yêu cầu đóng gói ủy quyền WhichIsFirst định nghĩa bên lớp Pair: public delegate comparison WhichIsFirst( object obj1, object obj2); Giá trị trả kiểu comparison kiểu liệt kê: public enum comparison { theFirstComesFirst = 1, theSecondComesFirst = } Bất phương thức tĩnh lấy hai tham số đối tượng object trả kiểu comparison đóng gói ủy quyền vào lúc thực thi Lúc định nghĩa phương thức Sort cho lớp Pair: public void Sort( WhichIsFirst theDelegateFunc) { if (theDelegateFunc(thePair[0], thePair[1]) == comparison.theSecondComeFirst) { 307 Cơ Chế Ủy Quyền - Sự Kiện ... Lưu ý: Từ phần sau quy ước sử dụng qua lại hai từ uỷ quy? ??n delegate với Sử dụng ủy quy? ??n để xác nhận phương thức lúc thực thi Ủ y quy? ??n biết dùng để xác định loại phương thức dùng để xử lý kiện... chương trình ứng dụng Chúng 305 Cơ Chế Ủy Quy? ??n - Sự Kiện Ngơn Ngữ Lập Trình C# sử dụng để xác định phương thức tĩnh instance phương thức mà trước chương trình thực Giả sử minh họa sau, muốn tạo lớp. ..Ngơn Ngữ Lập Trình C# Chương 11 CƠ CHẾ ỦY QUY? ??N - SỰ KIỆN Ủ y quy? ??n Sử dụng ủy quy? ??n để xác nhận phương thức lúc thực thi Ủ y quy? ??n tĩnh Dùng ủy quy? ??n thuộc tính Thiết