Giao diện
¾Giao diện làmột dạng của lớp trừu tư u tượng
¾Chỉ cócác nguyên mẫu phương th u phương thức, thuộc
tính, chỉ mục, đư được khai báo trong giao diện.
¾Tất cảcác thành phần khai báo trong giao
diện mặc đ c định là public(nên không cótừ
khóa vềmức đ c độtruy cập trong khai báo các
thuộc tính vàphương th phương thức)
¾Khi một lớp kếthừa một giao diện ta nói rằng
lớp đ p đóthực thi (Implement) giao diện
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com1 Giao diện (Giao tiếp) 1 Interface OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com2 Interface ¾Giao diện là một dạng của lớp trừu tượng ¾Chỉ có các nguyên mẫu phương thức, thuộc tính, chỉ mục, được khai báo trong giao diện. ¾Tất cả các thành phần khai báo trong giao diện mặc định là public (nên không có từ khóa về mức độ truy cập trong khai báo các thuộc tính và phương thức) ¾Khi một lớp kế thừa một giao diện ta nói rằng lớp đó thực thi (Implement) giao diện OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com3 Interface ¾Khi một lớp kế thừa một giao diện ta phải thực thi tất cả các phương thức, thuộc tính… khai báo trong giao diện đó. ¾Trong C# chỉ có kế thừa đơn ¾Muốn thực hiện đa kế thừa phải kế thừa thông qua Interface, nói các khác Một lớp chỉ có thể kế thừa 1 lớp khác, đồng thời kế thừa nhiều giao diện (đây tạm gọi là đa kế thừa trong C#) OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com4 Interface ¾Cú pháp tạo giao diện: [MứcĐộTruyCập] Interface TênGiaoDiện [: GiaoDiệnCơ Sở] { / / Nội dung giao diện } Trong đó: [MứcĐộTruyCập] : thường là public; [: GiaoDiệnCơ Sở] : danh sách các Interface khác mà nó kế thừa, mỗi Interface các nhau bởi dấu phẩy (,) OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: 5 public interface IPlayerManager { public void PlayMusic(); public void PauseMusic(); public void Stop(); public int OnOff // thuộc tính của Interface { get ; } } // Error ? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: 6 public interface IPlayerManager { void PlayMusic(); void PauseMusic(); void Stop(); int OnOff // thuộc tính của Interface { get ; } } // Error ? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: 7 public class Player : IPlayerManager { int _Switch; public void PlayMusic() { Console.WriteLine(“Music is playing ”); _Switch = 1 ; } public void PauseMusic() { Console.WriteLine(“Music is pause ”); _Switch = 0 ; } public void Stop() { Console.WriteLine(“Music is stopped ”); _Switch = -1 ; } } // Error ? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: 8 public class Player : IPlayerManager { int _Switch; public void PlayMusic() { Console.WriteLine(“Music is playing ”); _Switch = 1 ; } public void PauseMusic() { Console.WriteLine(“Music is pause ”); _Switch = 0 ; } public void Stop() { Console.WriteLine(“Music is stop ”); _Switch = -1 ; } public int OnOff { get { return _Switch ; } } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: interface 1 - Creating an interface 2 - Interface Inheritance Demo 3 - Interfaces Inheriting Interfaces 4 - One interface can inherit another interface 5 - Inheritance from both class and interface 9 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Hủy đối tượng (destructor) ¾ C# cũng hỗ trợ Destructor, nhưng chúng không được dùng thường xuyên như trong C++ ¾Các đối tượng trong .NET và C# thì bị xoá bởi bộ thu gom rác (garbage collection). ¾Destrutor được gọi tự động khi một đối tượng bị huỷ. ¾Không nên thực thi Destructor nếu như lớp đó không thực sự cần đến nó. 10 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Hủy đối tượng (destructor) ¾Nếu một object thực thi Destructor, thì nó sẽ gọi bộ thu gom rác của đối tượng đó. ¾Những object không có Destructor thì bị xoá khỏi bộ nhớ trong một lần hoạt động của bộ thu gom rác rác (garbage collection) ¾Object có Destructor thì nó sẽ qua hai bước: lần đầu nó gọi Destructor mà không xoá đối tượng, lần thứ hai mới thực sự xoá đối tượng. 11 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Ghi chú và cú pháp về destructor ¾Một lớp chỉ có 1 destructor. ¾Destructor không thể kế thừa hoặc là phương thức chồng (override) ¾Destructor không cần gọi mà chúng được gọi tự động ¾Cú pháp khai báo Destructor không có tham số ¾Cú pháp ~TênLớp() { // Thực hiện công việc dọn dẹp } 12 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Constructor vs Destructor ¾Số lượng phương thức? ¾Kế thừa ? ¾Cú pháp ? ¾Gọi thực thi ? ¾Nếu các lớp có Kế thừa Constructor của lớp cơ sở thực thi TRƯỚC Constructor lớp dẫn xuất, ngược lại Destructor của lớp cơ sở thực thi SAU Destructor lớp dẫn xuất 13 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: class LopA { public LopA() { Console.WriteLine("Creating A"); } ~LopA() { Console.WriteLine("Destroying A"); } } class LopB : LopA { public LopB() { Console.WriteLine("Creating B"); } ~LopB() { Console.WriteLine("Destroying B"); } } 14 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com class LopC : LopB { public LopC() { Console.WriteLine("Creating C"); } ~LopC () { Console.WriteLine("Destroying C"); } } class Program { public static void Main() { LopC c = new LopC(); Console.WriteLine("Object Created "); Console.WriteLine("Press enter to Destroy it"); Console.ReadLine(); c = null; Console.Read(); } } // Display ? 15 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Màn hình xuất hiện của VD trên Creating A Creating B Creating C Object Created Press enter to Destroy it Destroying C Destroying B Destroying A 16 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Hủy đối tượng (destructor) ¾ Thông qua giao diện IDisposable chúng ta có thể hủy đối tượng không cần nữa bằng cách gọi tường minh thông qua phương thức Dispose() của giao diện IDisposable public void Dispose() { // Thực hiện công việc dọn dẹp // Yêu cầu bộ thu dọn GC trong thực hiện kết thúc GC.SuppressFinalize( this ); } VD: trang 62 17 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Q&A
File đính kèm:
- 06_Interface.pdf