Bây giờ trách nhiệm của chúng ta, với vai trò là người xây dựng lớp Document phải cung cấp một thực thi có ý nghĩa thực sự cho những phương thức của giao diện IStorable. Chúng ta phải thực thi tất cả các phương thức của giao diện, nếu không trình biên dịch sẽ báo một lỗi. Sau đây là đoạn chương trình minh họa việc xây dựng lớp Document thực
Ngơn Ngữ Lập Trình C# public class Document : IStorable { public void Read() { } public void Write() { } } Bây trách nhiệm chúng ta, với vai trò người xây dựng lớp Document phải cung cấp thực thi có ý nghĩa thực cho phương thức giao diện IStorable Chúng ta phải thực thi tất phương thức giao diện, khơng trình biên dịch báo lỗi Sau đoạn chương trình minh họa việc xây dựng lớp Document thực thi giao diện IStorable Ví dụ 8.1: Sử dụng giao diện using System; // khai báo giao diện interface IStorable { // giao diện không khai báo bổ sung truy cập // phương thức public không thực thi void Read(); void Write(object obj); int Status { get; set; } } // tạo lớp thực thi giao diện IStorable public class Document : IStorable { public Document( string s) { Console.WriteLine(“Creating document with: {0}”, s); 178 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# } // thực thi phương thức Read() public void Read() { Console.WriteLine(“Implement the Read Method for IStorable”); } // thực thi phương thức Write public void Write( object o) { Console.WriteLine(“Impleting the Write Method for IStorable”); } // thực thi thuộc tính public int Status { get { return status; } set { status = value; } } // lưu trữ giá trị thuộc tính private int status = 0; } public class Tester { static void Main() { // truy cập phương thức đối tượng Document Document doc = new Document(“Test Document”); doc.Status = -1; doc.Read(); Console.WriteLine(“Document Status: {0}”, doc.Status); // gán cho giao diện sử dụng giao diện IStorable isDoc = (IStorable) doc; isDoc.Status = 0; 179 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# isDoc.Read(); Console.WriteLine(“IStorable Status: {0}”, isDoc.Status); } } Kết quả: Creating document with: Test Document Implementing the Read Method for IStorable Document Status: -1 Implementing the Read Method for IStorable IStorable Status: Ví dụ 8.1 định nghĩa giao diện IStorable với hai phương thức Read(), Write() thuộc tính tên Status có kiểu số nguyên Lưu ý phần khai báo thuộc tính khơng có phần thực thi cho get() set() mà đơn giản khai báo có hành vi get() set(): int Status { get; set;} Ngoài phần định nghĩa phương thức giao diện khơng có phần bổ sung truy cập (ví dụ như: public, protected, internal, private) Việc cung cấp bổ sung truy cập tạo lỗi Những phương thức giao diện ngầm định public giao diện ràng buộc sử dụng lớp khác Chúng ta tạo thể giao diện, thay vào tạo thể lớp có thực thi giao diện Một lớp thực thi giao diện phải đáp ứng đầy đủ xác ràng buộc khai báo giao diện Lớp Document phải cung cấp hai phương thức Read() Write() với thuộc tính Status Tuy nhiên cách thực yêu cầu hoàn toàn phụ thuộc vào lớp Document Mặc dù IStorage lớp Document phải có thuộc tính Status khơng biết hay không quan tâm đến việc lớp Document lưu trữ trạng thái thật biến thành viên, hay việc tìm kiếm sở liệu Những chi tiết phụ thuộc vào phần thực thi lớp 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 180 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# Do Document phải thực thi phương thức xác nhận giao diện ICompressible: public void Compress() { Console.WriteLine(“Implementing the Compress Method”); } public void Decompress() { Console.WriteLine(“Implementing the Decompress Method”); } Bổ sung thêm phần khai báo giao diện ICompressible định nghĩa phương thức giao diện bên lớp Document Sau tạo thể lớp Document gọi phương thức từ giao diện ta có kết tương tự sau: Creating document with: Test Document Implementing the Read Method for IStorable Implementing Compress 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(); } Các lớp khác thực thi tự giao diện ICompressible hay ILoggedCompressible tùy thuộc vào mục đích có cần thêm chức hay khơng Nếu lớp thực thi giao diện ILoggedCompressible, lớp phải thực thi tất phương thức hai giao diện ICompressible giao diện ILoggedCompressible Những đối tượng lớp thực thi giao diện ILoggedCompressible gán cho hai giao diện ILoggedCompressible ICompressible 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 181 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# 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(); } Ví dụ 8.2: Minh họa việc mở rộng kết hợp giao diện using System; interface IStorable { void Read(); void Write(object obj); int Status { get; set;} } // giao diện interface ICompressible { void Compress(); void Decompress(); } // mở rộng giao diện interface ILoggedCompressible : ICompressible { void LogSavedBytes(); } // kết hợp giao diện interface IStorableCompressible : IStorable, ILoggedCompressible { void LogOriginalSize(); } interface IEncryptable { void Encrypt(); void Decrypt(); } public class Document : IStorableCompressible, IEncryptable { 182 Thực Thi Giao Diện ... hai giao diện ILoggedCompressible ICompressible 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. .. thi giao diện ILoggedCompressible, lớp phải thực thi tất phương thức hai giao diện ICompressible giao diện ILoggedCompressible Những đối tượng lớp thực thi giao diện ILoggedCompressible gán cho. .. nghĩa phương thức giao diện khơng có phần bổ sung truy cập (ví dụ như: public, protected, internal, private) Việc cung cấp bổ sung truy cập tạo lỗi Những phương thức giao diện ngầm định public giao