1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình hướng dẫn truy cập phương thức gán đối tượng cho một giao diện đối lập trừu tượng p5

5 3 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

Tham khảo tài liệu ''giáo trình hướng dẫn truy cập phương thức gán đối tượng cho một giao diện đối lập trừu tượng p5'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Ngơn Ngữ Lập Trình C# public void Read() { } public void Write( object o) { } // } Thực thi phủ 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 Ví dụ 8.4 mở rộng từ ví dụ 8.3 minh họa việc phủ thực thi giao diện Phương thức Read() đánh dấu phương thức ảo thực thi Document.Read() cuối phủ kiểu liệu Note dẫn xuất từ Document  Ví dụ 8.4: Phủ thực thi giao diện using System; interface IStorable { void Read(); void Write(); } // lớp Document đơn giản thực thi giao diện IStorable public class Document : IStorable { // khởi dựng public Document( string s) { Console.WriteLine(“Creating document with: {0}”, s); } // đánh dấu phương thức Read ảo public virtual void Read() { Console.WriteLine(“Document Read Method for IStorable”); 193 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C# } // khơng phải phương thức ảo public void Write() { Console.WriteLine(“Document Write Method for IStorable”); } } // lớp dẫn xuất từ Document public class Note : Document { public Note( string s) : base(s) { Console.WriteLine(“Creating note with: {0}”, s); } // phủ phương thức Read() public override void Read() { Console.WriteLine(“Overriding the Read Method for Note!”); } // thực thi phương thức Write riêng lớp public void Write() { Console.WriteLine(“Implementing the Write method for Note!”); } } public class Tester { static void Main() { // tạo đối tượng Document Document theNote = new Note(“Test Note”); IStorable isNote = theNote as IStorable; if ( isNote != null) { isNote.Read(); isNote.Write(); } Console.WriteLine(“\n”); 194 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C# // trực tiếp gọi phương thức theNote.Read(); theNote.Write(); Console.WriteLine(“\n”); // tạo đối tượng Note Note note2 = new Note(“Second Test”); IStorable isNote2 = note2 as IStorable; if ( isNote != null ) { isNote2.Read(); isNote2.Write(); } Console.WriteLine(“\n”); // trực tiếp gọi phương thức note2.Read(); note2.Write(); } }  Kết quả: Creating document with: Test Note Creating note with: Test Note Overriding the Read method for Note! Document Write Method for IStorable Overriding the Read method for Note! Document Write Method for IStorable Creating document with: Second Test Creating note with: Second Test Overriding the Read method for Note! Document Write Method for IStorable Overriding the Read method for Note! Implementing the Write method for Note! Trong ví dụ trên, lớp Document thực thi giao diện đơn giản IStorable: interface IStorable 195 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# { void Read(); void Write(); } Người thiết kế lớp Document thực thi phương thức Read() phương thức ảo không tạo phương thức Write() tương tự vậy: public virtual void Read() Trong ứng dụng giới thực, đánh dấu hai phương thức phương thức ảo Tuy nhiên ví dụ minh họa việc người phát triển tùy ý chọn phương thức ảo giao diện mà lớp thực thi Một lớp Note dẫn xuất từ Document: public class Note : Document Việc phủ phương thức Read() lớp Note không cần thiết, ta tự làm điều này: public override void Read() Trong lớp Tester, phương thức Read() Write() gọi theo bốn cách sau:  Thông qua lớp sở tham chiếu đến đối tượng lớp dẫn xuất  Thông qua giao diện tạo từ lớp sở tham chiếu đến đối tượng dẫn xuất  Thông qua đối tượng dẫn xuất  Thông qua giao diện tạo từ đối tượng dẫn xuất Thực cách gọi thứ nhất, tham chiếu Document tạo ra, địa đối tượng lớp dẫn xuất Note tạo heap gán trở lại cho đối tượng Document: Document theNote = new Note(“Test Note”); Môt tham chiếu giao diện tạo toán tử as sử dụng để gán Document cho tham chiếu giao diện IStorable: IStorable isNote = theNote as IStorable; Sau gọi phương thức Read() Write() thông qua giao diện Kết xuất phương thức Read() thực cách đa hình phương thức Write() khơng, ta có kết xuất sau: Overriding the Read method for Note! Document Write Method for IStorable Phương thức Read() Write() gọi trực tiếp từ thân đối tượng: theNote.Read(); theNote.Write(); lần thấy việc thực thi đa hình làm việc: Overriding the Read method for Note! Document Write Method for IStorable 196 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# Trong trường hợp này, phương thức Read() lớp Note gọi, phương thức Write() lớp Document gọi Để chứng tỏ kết phương thức phủ quyết, tiếp tục tạo đối tượng Note thứ hai lúc ta gán cho tham chiếu Note Điều sử dụng để minh họa cho trường hợp cuối (gọi thông qua đối tượng dẫn xuất gọi thông qua giao diện tạo từ đối tượng dẫn xuất): Note note2 = new Note(“Second Test”); Một lần nữa, gán cho tham chiếu, phương thức phủ Read() gọi Tuy nhiên, phương thức gọi trực tiếp từ đối tượng Note: note2.Read(); note2.Write(); kết cho ta thấy cách phương thức Note gọi phương thức Document: Overriding the Read method for Note! Implementing the Write method dor Note! 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 diện có phương thức ký hiệu Ví dụ 8.5 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(); 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 bổ sung truy cập: void ITalk.Read(); Phương thức hiểu ngầm public 197 Thực Thi Giao Diện ... qua đối tượng dẫn xuất  Thông qua giao diện tạo từ đối tượng dẫn xuất Thực cách gọi thứ nhất, tham chiếu Document tạo ra, địa đối tượng lớp dẫn xuất Note tạo heap gán trở lại cho đối tượng Document:... họa cho trường hợp cuối (gọi thông qua đối tượng dẫn xuất gọi thông qua giao diện tạo từ đối tượng dẫn xuất): Note note2 = new Note(“Second Test”); Một lần nữa, gán cho tham chiếu, phương 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 diện có phương thức ký hiệu Ví dụ 8.5 tạo hai giao diện: IStorable ITalk Sau thực thi phương

Ngày đăng: 08/05/2021, 13:52

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN