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 p6

5 1 0

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

THÔNG TIN TÀI LIỆU

Nội dung

Thật vậy, một phương thức được khai báo tường minh thì sẽ không được khai báo với các từ khóa bổ sung truy cập: abstract, virtual, override, và new. Một địều quan trọng khác là chúng ta không thể truy cập phương thức thực thi tường minh thông qua chính đối tượng. Khi chúng ta viết:

Ngơn Ngữ Lập Trình C# Thật vậy, phương thức khai báo tường minh khơng khai báo với từ khóa bổ sung truy cập: abstract, virtual, override, new Một địều quan trọng khác truy cập phương thức thực thi tường minh thơng qua đối tượng Khi viết: theDoc.Read(); Trình biên dịch hiểu thực thi phương thức giao diện ngầm định cho IStorable Chỉ cách truy cập phương thức thực thi tường minh thông qua việc gán cho giao diện để thực thi: ITalk itDoc = theDoc as ITalk; if ( itDoc != null ) { itDoc.Read(); } Sử dụng thực thi tường minh áp dụng ví dụ 8.5  Ví dụ 8.5: Thực thi tường minh using System; interface IStorable { void Read(); void Write(); } interface ITalk { void Talk(); void Read(); } // lớp Document thực thi hai giao diện public class Document : IStorable, ITalk { // khởi dựng public Document( string s) { Console.WriteLine(“Creating document with: {0}”,s); } // tạo phương thức ảo public virtual void Read() { 198 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# Console.WriteLine(“Implementing IStorable.Read”); } // thực thi bình thường public void Write() { Console.WriteLine(“Implementing IStorable.Write”); } // thực thi tường minh void ITalk.Read() { Console.WriteLine(“Implementing ITalk.Read”); } public void Talk() { Console.WriteLine(“Implementing ITalk.Talk”); } } public class Tester { static void Main() { // tạo đối tượng Document Document theDoc = new Document(“Test Document”); IStorable isDoc = theDoc as IStorable; if ( isDoc != null ) { isDoc.Read(); } ITalk itDoc = theDoc as ITalk; if ( itDoc != null ) { itDoc.Read(); } theDoc.Read(); theDoc.Talk(); } } 199 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C#  Kết quả: Creating document with: Test Document Implementing IStorable.Read Implementing ITalk.Read Implementing IStorable.Read Implementing ITalk.Talk - Lựa chọn việc thể phương thức giao diện Những người thiết kế lớp thu lợi giao diện thực thi thông qua thực thi tường minh không cho phép thành phần client lớp truy cập sử dụng thông qua việc gán cho giao diện Giả sử nghĩa đối tượng Document thực thi giao diện IStorable, khơng muốn phương thức Read() Write() phần giao diện public lớp Document Chúng ta sử dụng thực thi tường minh để chắn truy cập thông qua việc gán cho giao diện Điều cho phép lưu trữ ngữ nghĩa lớp Document thực thi giao diện IStorable Nếu thành phần client muốn đối tượng thực thi giao diện IStorable, thực gán tường minh cho giao diện để gọi phương thức thực thi giao diện Nhưng sử dụng đối tượng Document nghĩa khơng có phương thức Read() Write() Thật vậy, lựa chọn thể phương thức thông qua thực thi tường minh, trưng bày vài phương thức thực thi phần lớp Document số phương thức khác khơng Trong ví dụ 8.5, đối tượng Document trưng bày phương thức Talk() phương thức lớp Document, phương thức Talk.Read() thể thông qua gán cho giao diện Thậm chí IStorable khơng có phương thức Read(), chọn thực thi tường minh phương thức Read() để phương thức bên phương thức Document Chúng ta lưu ý thực thi giao diện tường minh ngăn ngừa việc sử dụng từ khóa virtual, lớp dẫn xuất hỗ trợ để thực thi lại phương thức Do đó, Note dẫn xuất từ Document, thực thi lại phương thức Talk.Read() lớp Document thực thi phương thức Talk.Read() ảo Ẩ n thành viên Ngôn ngữ C# cho phép ẩn thành viên giao diện Ví dụ, có giao diện IBase với thuộc tính P: interface IBase 200 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# { int P { get; set;} } sau dẫn xuất từ giao diện giao diện khác, IDerived, giao diện làm ẩn thuộc tính P với phương thức P(): interface IDerived : IBase { new int P(); } Việc cài đặt ý tưởng tốt, ẩn thuộc tính P lớp sở Một thực thi giao diện dẫn xuất đòi hỏi tối thiểu thành viên giao diện tường minh Chúng ta sử dụng thực thi tường minh cho thuộc tính lớp sở phương thức dẫn xuất, sử dụng thực thi tường minh cho hai Do đó, ba phiên viết sau hợp lệ: class myClass : IDerived { // thực thi tường minh cho thuộc tính sở int IBase.p { get{ }} // thực thi ngầm định phương thức dẫn xuất public int P() { } } class myClass : IDerived { // thực thi ngầm định cho thuộc tính sở public int P { get{ }} // thực thi tường minh phương thức dẫn xuất int IDerived.P() { } } class myClass : IDerived { // thực thi tường minh cho thuộc tính sở int IBase.P { get{ }} // thực thi tường minh phương thức dẫn xuất int IDerived.P(){ } } Truy cập lớp không cho dẫn xuất kiểu giá trị 201 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# Nói chung, việc truy cập phương thức giao diện thơng qua việc gán cho giao diện thường thích Ngoại trừ kiểu giá trị (như cấu trúc) với lớp không cho dẫn xuất (sealed class) Trong trường hợp này, cách ưu chuộng gọi phương thức giao diện thông qua đối tượng Khi thực thi giao diện cấu trúc, thực thi kiểu liệu giá trị Khi gán cho mơt tham chiếu giao diện, có boxing ngầm định đối tượng Chẳng may sử dụng giao diện để bổ sung đối tượng, đối tượng boxing, khơng phải đối tượng nguyên thủy cần bổ sung Xa nữa, thay đổi kiểu liệu giá trị, kiểu liệu boxing khơng thay đổi Ví dụ 8.6 tạo cấu trúc thực thi giao diện IStorable minh họa việc boxing ngầm định gán cấu trúc cho tham chiếu giao diện  Ví dụ 8.6: Tham chiếu đến kiểu liệu giá trị using System; // khai báo giao diện đơn interface IStorable { void Read(); int Status { get; set;} } // thực thi thông qua cấu trúc public struct myStruct : IStorable { public void Read() { Console.WriteLine(“Implementing IStorable.Read”); } public int Status { get { return status; } set { status = value; } } 202 Thực Thi Giao Diện ... IDerived.P(){ } } Truy cập lớp không cho dẫn xuất kiểu giá trị 201 Thực Thi Giao Diện Ngơn Ngữ Lập Trình C# Nói chung, việc truy cập phương thức giao diện thơng qua việc gán cho giao diện thường thích... việc gán cho giao diện Điều cho phép lưu trữ ngữ nghĩa lớp Document thực thi giao diện IStorable Nếu thành phần client muốn đối tượng thực thi giao diện IStorable, thực gán tường minh cho giao diện. .. qua gán cho giao diện Thậm chí IStorable khơng có phương thức Read(), chọn thực thi tường minh phương thức Read() để phương thức bên phương thức Document Chúng ta lưu ý thực thi giao diện tường

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

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

TÀI LIỆU LIÊN QUAN