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 p4
Số trang: 5
Loại file: pdf
Dung lượng: 868.07 KB
Lượt xem: 7
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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ội dung trích xuất từ 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 p4 Ngôn Ngữ Lập Trình C# 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ệnIStorable 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 : IStorablephép gán cho ICompressible vẫn được biên dịch bởi vì ICompressible là một giao diện hợplệ. 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): A exception of type System.InvalidCastException was thrown.Phần ngoại lệ sẽ được trình bày trong Chương 11.Toán tử isChúng ta muốn kiểm tra một đối tượng xem nó có hỗ trợ giao diện, để sau đó thực hiện cácphương thức tương ứng. Trong ngôn ngữ C# có hai cách để thực hiện điều này. Phương phápđầu tiên là sử dụng toán tử is.Cú pháp của toán tử is là: is Toán tử is trả về giá trị true nếu biểu thức thường là kiểu tham chiếu có thể được gán an toànđến kiểu dữ liệu cần kiểm tra mà không phát sinh ra bất cứ ngoại lệ nào. Ví dụ 8.3 minh họaviệc sử dụng toán tử is để kiểm tra Document có thực thi giao diện IStorable hayICompressible. Ví dụ 8.3: Sử dụng toán tử is.-----------------------------------------------------------------------------using System;interface IStorable{ void Read(); void Write(object obj); int Status { get; set; }}// giao diện mới 188 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C#interface ICompressible{ void Compress(); void Decompress();}// Document thực thi IStorablepublic class Document : IStorable{ public Document( string s) { Console.WriteLine(“Creating document with: {0}”, s); } // IStorable public void Read() { Console.WriteLine(“Implementing the Read Method for IStorable”); } // IStorable.WriteLine() public void Write( object o) { Console.WriteLine(“Implementing the Write Method for IStorable”); } // IStorable.Status public int Status { get { return status; } set { status = value; } } // bien thanh vien luu gia tri cua thuoc tinh Status private int status = 0;}public class Tester 189 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C#{ static void Main() { Document doc = new Document(“Test Document”); // chỉ gán khi an toàn if ( doc is IStorable ) { IStorable isDoc = (IStorable) doc; isDoc.Read(); } // việc kiểm tra này sẽ sai if ( doc is ICompressible ) { ICompressible icDoc = (ICompressible) doc; icDoc.Compress(); } }}-----------------------------------------------------------------------------Trong ví dụ 8.3, hàm Main() lúc này sẽ thực hiện việc gán với interface khi được kiểm trahợp lệ. Việc kiểm tra này được thực hiện bởi câu lệnh if: if ( doc is IStorable )Biểu thức điều kiện sẽ trả về giá trị true và phép gán sẽ được thực hiện khi đối tượng có thựcthi giao diện bên phải của toán tử is.Tuy nhiên, việc sử dụng toán tử is đưa ra một việc không có hiệu quả. Để hiểu được điều này,chúng ta xem đoạn chương trình được biên dịch ra mã IL. Ở đây sẽ có một ngoại lệ nhỏ, cácdòng bên dưới là sử dụng hệ thập lục phân: IL_0023: isinst ICompressible IL_0028: brfalse.s IL_0039 IL_002a: ldloc.0 IL_002b: castclass ICompressible IL_0030: stloc.2 IL_0031: ldloc.2 IL_0032: callvirt instance void ICompressible::Compress() IL_0037: br.s IL_0043 IL_0039: ldstr “Compressible not supported”Điều quan trọng xảy ra là khi phép kiểm tra ICompressible ở dòng 23. Từ khóa isinst là mãMSIL tương ứng với toán tử is. Nếu việc kiểm tra đối tượng (doc) đúng kiểu của kiểu bên 190 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C#phải. Thì chương trình sẽ chuyển đến dòng lệnh 2b để thực hiện tiếp và castclass được gọi.Điều không may là castcall cũng kiểm tra kiểu c ...
Nội dung trích xuất từ 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 p4 Ngôn Ngữ Lập Trình C# 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ệnIStorable 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 : IStorablephép gán cho ICompressible vẫn được biên dịch bởi vì ICompressible là một giao diện hợplệ. 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): A exception of type System.InvalidCastException was thrown.Phần ngoại lệ sẽ được trình bày trong Chương 11.Toán tử isChúng ta muốn kiểm tra một đối tượng xem nó có hỗ trợ giao diện, để sau đó thực hiện cácphương thức tương ứng. Trong ngôn ngữ C# có hai cách để thực hiện điều này. Phương phápđầu tiên là sử dụng toán tử is.Cú pháp của toán tử is là: is Toán tử is trả về giá trị true nếu biểu thức thường là kiểu tham chiếu có thể được gán an toànđến kiểu dữ liệu cần kiểm tra mà không phát sinh ra bất cứ ngoại lệ nào. Ví dụ 8.3 minh họaviệc sử dụng toán tử is để kiểm tra Document có thực thi giao diện IStorable hayICompressible. Ví dụ 8.3: Sử dụng toán tử is.-----------------------------------------------------------------------------using System;interface IStorable{ void Read(); void Write(object obj); int Status { get; set; }}// giao diện mới 188 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C#interface ICompressible{ void Compress(); void Decompress();}// Document thực thi IStorablepublic class Document : IStorable{ public Document( string s) { Console.WriteLine(“Creating document with: {0}”, s); } // IStorable public void Read() { Console.WriteLine(“Implementing the Read Method for IStorable”); } // IStorable.WriteLine() public void Write( object o) { Console.WriteLine(“Implementing the Write Method for IStorable”); } // IStorable.Status public int Status { get { return status; } set { status = value; } } // bien thanh vien luu gia tri cua thuoc tinh Status private int status = 0;}public class Tester 189 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C#{ static void Main() { Document doc = new Document(“Test Document”); // chỉ gán khi an toàn if ( doc is IStorable ) { IStorable isDoc = (IStorable) doc; isDoc.Read(); } // việc kiểm tra này sẽ sai if ( doc is ICompressible ) { ICompressible icDoc = (ICompressible) doc; icDoc.Compress(); } }}-----------------------------------------------------------------------------Trong ví dụ 8.3, hàm Main() lúc này sẽ thực hiện việc gán với interface khi được kiểm trahợp lệ. Việc kiểm tra này được thực hiện bởi câu lệnh if: if ( doc is IStorable )Biểu thức điều kiện sẽ trả về giá trị true và phép gán sẽ được thực hiện khi đối tượng có thựcthi giao diện bên phải của toán tử is.Tuy nhiên, việc sử dụng toán tử is đưa ra một việc không có hiệu quả. Để hiểu được điều này,chúng ta xem đoạn chương trình được biên dịch ra mã IL. Ở đây sẽ có một ngoại lệ nhỏ, cácdòng bên dưới là sử dụng hệ thập lục phân: IL_0023: isinst ICompressible IL_0028: brfalse.s IL_0039 IL_002a: ldloc.0 IL_002b: castclass ICompressible IL_0030: stloc.2 IL_0031: ldloc.2 IL_0032: callvirt instance void ICompressible::Compress() IL_0037: br.s IL_0043 IL_0039: ldstr “Compressible not supported”Điều quan trọng xảy ra là khi phép kiểm tra ICompressible ở dòng 23. Từ khóa isinst là mãMSIL tương ứng với toán tử is. Nếu việc kiểm tra đối tượng (doc) đúng kiểu của kiểu bên 190 Thực Thi Giao Diện Ngôn Ngữ Lập Trình C#phải. Thì chương trình sẽ chuyển đến dòng lệnh 2b để thực hiện tiếp và castclass được gọi.Điều không may là castcall cũng kiểm tra kiểu c ...
Tìm kiếm theo từ khóa liên quan:
giáo trình đại học tài liệu mạng giáo trình cơ điện giáo trình thiết kế tài liệu kế toánTài liệu liên quan:
-
Giáo trình phân tích một số loại nghiệp vụ mới trong kinh doanh ngân hàng quản lý ngân quỹ p5
7 trang 474 0 0 -
MARKETING VÀ QUÁ TRÌNH KIỂM TRA THỰC HIỆN MARKETING
6 trang 302 0 0 -
122 trang 217 0 0
-
QUY CHẾ THU THẬP, CẬP NHẬT SỬ DỤNG CƠ SỞ DỮ LIỆU DANH MỤC HÀNG HÓA BIỂU THUẾ
15 trang 212 1 0 -
BÀI GIẢNG KINH TẾ CHÍNH TRỊ MÁC - LÊNIN - TS. NGUYỄN VĂN LỊCH - 5
23 trang 210 0 0 -
Giáo trình hướng dẫn phân tích các thao tác cơ bản trong computer management p6
5 trang 201 0 0 -
Giáo trình chứng khoán cổ phiếu và thị trường (Hà Hưng Quốc Ph. D.) - 4
41 trang 200 0 0 -
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG - NGÂN HÀNG ĐỀ THI HẾT HỌC PHẦN HỌC PHẦN: TOÁN KINH TẾ
9 trang 177 0 0 -
BÀI GIẢNG LÝ THUYẾT MẠCH THS. NGUYỄN QUỐC DINH - 1
30 trang 176 0 0 -
Giáo trình phân tích giai đoạn tăng lãi suất và giá trị của tiền tệ theo thời gian tích lũy p10
5 trang 170 0 0