Tài liệu Bài giảng Lập trình hướng đối tượng 1 - Chương 5: Ủy nhiệm hàm, sự kiện và xử lý ngoại lệ - Thái Kim Phụng: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 1 Trường ĐH Kinh Tế Tp.HCMKhoa Tin Học Quản LýCHƯƠNG 5:UỶ NHIỆM HÀM, SỰ KIỆN VÀ XỬ LÝ NGOẠI LỆNội dung1. Uỷ nhiệm hàm (delegate)2. Sự kiện (event)3. Xử lý ngoại lệ 1. Uỷ nhiệm hàmUỷ nhiệm hàm(delegate) là một đối tượng cho phép chúng ta thực hiện gọi phương thức vào thời điểm mà chương trình đang thực hiện (runtime).Uỷ nhiệm hàm không làm việc riêng lẻ mà giao cho phương thức làm công việc của nó.Để thực hiện khai báo một uỷ nhiệm ta sử dụng từ khóa delegate. Một uỷ nhiệm hàm là một đối tượng tham chiếu đến một phương thức, chính vì vậy khi khai báo uỷ nhiệm hàm ta thực hiện khai báo khuôn dạng của phương thức mà uỷ nhiệm hàm tham chiếu đến.1. Uỷ nhiệm hàmCú pháp khai báo 1 uỷ nhiệm hàm:Ví dụ: khai báo một uỷ nhiệm hàm cho phép tham chiếu đến tất cả các hàm có 2 tham số nguyên và trả về một số nguyên. public delegate int PhepTinh(int a, int b); [bổ từ truy cập] delegate (danh sách các tham số);1. Uỷ nhiệm hàmclass Calculator { public double Sum(int value1, int...
22 trang |
Chia sẻ: putihuynh11 | Lượt xem: 496 | Lượt tải: 1
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Lập trình hướng đối tượng 1 - Chương 5: Ủy nhiệm hàm, sự kiện và xử lý ngoại lệ - Thái Kim Phụng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 1 Trường ĐH Kinh Tế Tp.HCMKhoa Tin Học Quản LýCHƯƠNG 5:UỶ NHIỆM HÀM, SỰ KIỆN VÀ XỬ LÝ NGOẠI LỆNội dung1. Uỷ nhiệm hàm (delegate)2. Sự kiện (event)3. Xử lý ngoại lệ 1. Uỷ nhiệm hàmUỷ nhiệm hàm(delegate) là một đối tượng cho phép chúng ta thực hiện gọi phương thức vào thời điểm mà chương trình đang thực hiện (runtime).Uỷ nhiệm hàm không làm việc riêng lẻ mà giao cho phương thức làm công việc của nó.Để thực hiện khai báo một uỷ nhiệm ta sử dụng từ khóa delegate. Một uỷ nhiệm hàm là một đối tượng tham chiếu đến một phương thức, chính vì vậy khi khai báo uỷ nhiệm hàm ta thực hiện khai báo khuôn dạng của phương thức mà uỷ nhiệm hàm tham chiếu đến.1. Uỷ nhiệm hàmCú pháp khai báo 1 uỷ nhiệm hàm:Ví dụ: khai báo một uỷ nhiệm hàm cho phép tham chiếu đến tất cả các hàm có 2 tham số nguyên và trả về một số nguyên. public delegate int PhepTinh(int a, int b); [bổ từ truy cập] delegate (danh sách các tham số);1. Uỷ nhiệm hàmclass Calculator { public double Sum(int value1, int value2, int value3) { return value1 + value2 + value3; } }class Program { public delegate double Calculation(int x, int y, int z); static void Main(string[ ] args) { Calculator c = new Calculator(); Calculation cal = new Calculation(c.Sum); System.Console.WriteLine("Tong cua 3 so la: " + cal(1,3,4) ); } }Khai báo uỷ nhiệmTạo đối tượng uỷ nhiệmGọi uỷ nhiệm2. Sự kiện (Event)Sự kiện: là một tín hiệu được thông báo giữa các đối tượng. Sự kiện xảy ra khi có sự tương tác giữa các đối tượng trong hệ thống. Sự kiện là các kích thích xảy ra bên trong hoặc bên ngoài hệ thống. 2. Sự kiện (Event)Các bước tạo và sử dụng sự kiện trong C#:Tạo một uỷ nhiệm hàm để cho phép tham chiếu đến các phương thức mà thực hiện tương tác lại các sự kiện (đáp ứng khi các sự kiện xảy ra).Khai báo sự kiện với cú pháp sau:[bổ từ truy cập] event ;Đăng ký sự kiện bằng cú pháp “+=”2. Sự kiện (Event)public delegate void BatCongTac(bool state);public class CongTac { public event BatCongTac OnBatCongTac; public bool state; public void KhiBatCongTac() { OnBatCongTac(state); state = state ? false: true; }}Khai báo delagate BatCongTacKhai báo sự kiện OnBatCongTac2. Sự kiện (Event)public class Program { static void Main(string[] args) { CongTac c = new CongTac(); BongDen b = new BongDen(); c.OnBatCongTac += new BatCongTac(b.TrangThaiDen); c.KhiBatCongTac(); c.KhiBatCongTac(); } }Đăng ký sự kiệnPhương thức xử lý2. Sự kiện (Event)public class BongDen{ public void TrangThaiDen(bool state) { if (state) Console.WriteLine("Den sang"); else Console.WriteLine("Den tat"); } }3. Xử lý ngoại lệNgoại lệ (Exception): là bất kì sự bất thường nào xảy ra không mong muốn trong ứng dụng. Một ứng dụng tốt thì cần phải giải quyết được tất cả các ngoại lệ có thể xảy ra.Các kiểu ngoại lệ: có 2 kiểu ngoại lệCác ngoại lệ ở mức hệ thống: các ngoại lệ này là những ngoại lệ được ném ra (thrown) bởi hệ thống và thường là các nguyên nhân do hệ thống gây ra như thiếu bộ nhớ, kết nối mạng bị ngắt, phần cứng bị lỗi,.Các ngoại lệ mức ứng dụng: là các ngoại lệ được ném ra bởi người viết ứng dụng3. Xử lý ngoại lệTất cả các ngoại lệ trong C# đều trực tiếp hoặc gián tiếp kế thừa từ lớp Exception, trong namespace SystemLớp Exception có các thuộc tính sau:Message: Lưu trữ thông điệp chỉ ra nguyên nhân của ngoại lệ.Source: chỉ ra tên của ứng dụng hoặc tên của đối tượng gây ra ngoại lệ.StackTrace: cung cấp thông tin chi tiết về ngoại lệ trên Stack vào thời điểm mà nó được quẳng ra.InnerException: trả về thể hiện của ngoại lệ gây ra ngoại lệ hiện tại3. Xử lý ngoại lệExceptionIOExceptionSystemExceptionOutOfMemoryExceptionOverflowExceptionFormatException.....3. Xử lý ngoại lệC# hỗ trợ cấu trúc kiểm soát ngoại lệ xảy ra trong đoạn chương trình là try, throw, catch và finally với tổ hợp khai báo như:throwtry-catchtry-finallytry-catch-finally3. Xử lý ngoại lệ1. Phát biểu throw: Dùng để phát ra tín hiệu của sự cố bất thường trong khi chương trình thực thi với cú pháp: throw [expression];Trong đó: expression là đối tượng ngoại lệ.3. Xử lý ngoại lệusing System;public class ThrowTest { public static void Main() { string s = null; if (s == null) { throw (new ArgumentNullException()); // ném ra ngoại lệ } Console.Write("The string s is null"); // không được thực thi }}3. Xử lý ngoại lệ2. Phát biểu try-catch: Phát biểu try-catch dùng để đón bắt các ngoại lệ với cú pháp như sau: try { // mã lệnh nghi ngờ } catch [(expression1)] { //mã lệnh xử lý 1 } catch [(expression2)] { //mã lệnh xử lý 2 }3. Xử lý ngoại lệclass MyClass { public static void Main() { MyClass x = new MyClass(); try { string s = null; x.MyFn(s); } catch (Exception e) { Console.WriteLine("{0} First exception caught.", e); } } public void MyFn(string s) { if (s == null) throw new ArgumentNullException (); } }3. Xử lý ngoại lệ3. Phát biểu try-catch-finally: try { // mã lệnh nghi ngờ } catch [(expression)] { //mã lệnh xử lý khi ngoại lệ phát sinh } finally { //mã lệnh xử lý cho dù ngoại lệ có phát sinh hay không }3. Xử lý ngoại lệclass MyClass { public static void Main() { MyClass x = new MyClass(); try { string s = null; x.MyFn(s); } catch (Exception e) { Console.WriteLine("{0} First exception caught.", e); } finally { Console.WriteLine(“The program continues here."); } } public void MyFn(string s) { if (s == null) throw new ArgumentNullException (); } }3. Xử lý ngoại lệCÁC LỚP NGOẠI LỆTên ngoại lệMô tảMethodAccessException Lỗi truy cập, do truy cập đến thành viên hay phương thức không được truy cậpArgumentException Lỗi đối sốArgumentNullException Phương thức được truyền đối số null không được chấp nhậnArithmeticException Lỗi liên quan đến các phép toánArrayTypeMismatchException Kiểu mảng không hợp, khi cố lưu trữ kiểu không thích hợp vào mảngDivideByZeroException Lỗi chia zeroFormatException Định dạng không chính xácIndexOutOfRangeException Chỉ số truy cập mảng không hợp lệ, nhỏ hơn chỉ số nhỏ nhất hay lớn hơn chỉ số lớn nhất của mảng3. Xử lý ngoại lệInvalidCastException Phép gán không hợp lệMulticastNotSupportedException Multicast không được hỗ trợ, do việc kết hợp 2 delegate không đúngNotFiniteNumberException Không phải số hữu hạn, số không hợp lệNotSupportedException Phương thức không hỗ trợ, khi gọi một phương thức không tồn tại bên trong lớp.NullReferenceException Tham chiếu null không hợp lệ.OutOfMemoryException Lỗi tràn bộ nhớOverflowException Lỗi tràn phép toánStackOverflowException Tràn stackTypeInitializationException Kiểu khởi tạo sai, khi bộ khởi dựng tĩnh có lỗi.
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_huong_doi_tuong_1_ch05_4561_1987365.ppt