Truy cập phương thức giao diện

Một phần của tài liệu Tự học CSharp chương 5 docx (Trang 27 - 28)

Chúng ta có thể truy cập những thành viên của giao diện IStorable như thể là các thành viên của lớp Document:

Document doc = new Document(“Test Document”); doc.status = -1;

doc.Read();

hay là ta có thể tạo thể hiện của giao diện bằng cách gán đối tượng Document cho một kiểu dữ liệu giao diện, và sau đó sử dụng giao diện này để truy cập các phương thức:

IStorable isDoc = (IStorable) doc; isDoc.status = 0;

isDoc.Read();

Ghi chú: Cũng như đã nói trước đây, chúng ta không thể tạo thể hiện của giao diện một cách trực tiếp.Do đó chúng ta không thể thực hiện như sau:

IStorable isDoc = new IStorable();

Tuy nhiên chúng ta có thể tạo thể hiện của lớp thực thi như sau:

Document doc = new Document(“Test Document”);

Sau đó chúng ta có thể tạo thể hiện của giao diện bằng cách gán đối tượng thực thi đến kiểu dữ liệu giao diện, trong trường hợp này là IStorable:

IStorable isDoc = (IStorable) doc;

Chúng ta có thể kết hợp những bước trên như sau:

IStorable isDoc = (IStorable) new Document(“Test Document”);

Nói chung, cách thiết kế tốt nhất là quyết định truy cập những phương thức của giao diện thông qua tham chiếu của giao diện. Do vậy cách tốt nhất là sử dụng isDoc.Read(), hơn là sử dụng doc.Read() trong ví dụ trước. Truy cập thông qua giao diện cho phép chúng ta đối xử giao diện một cách đa hình. Nói cách khác, chúng ta tạo hai hay nhiều hơn những lớp thực thi giao diện, và sau đó bằng cách truy cập lớp này chỉ thông qua giao diện.

Gán đối tượng cho một giao diện

Trong nhiều trường hợp, chúng ta không biết trước một đối tượng có hỗ trợ một giao diện đưa ra. Ví dụ, giả sử chúng ta có một tập hợp những đối tượng Document, một vài đối tượng đã được lưu trữ và số còn lại thì chưa. Và giả sử chúng ta đã thêm giao diện giao diện thứ hai, ICompressible cho những đối tượng để nén dữ liệu và truyền qua mail nhanh chóng:

interface ICompressible {

void Compress(); void Decompress(); }

Nếu đưa ra một kiểu Document, và ta cũng không biết là lớp này có hỗ trợ giao diện

IStorable hay ICompressible hoặc cả hai. Ta có thể có đoạn chương trình sau:

Document doc = new Document(“Test Document”); IStorable isDoc = (IStorable) doc;

isDoc.Read();

ICompressible icDoc = (ICompressible) doc; icDoc.Compress();

Nếu Document chỉ thực thi giao diện IStorable:

public class Document : IStorable

phép gán cho ICompressible vẫn được biên dịch bởi vì ICompressible là một giao diện hợp lệ. Tuy nhiên, do phép gán không hợp lệ nên khi chương trình chạy thì sẽ tạo ra một ngoại lệ (exception):

Một phần của tài liệu Tự học CSharp chương 5 docx (Trang 27 - 28)

Tải bản đầy đủ (PDF)

(40 trang)