tailieunhanh - THỰC THI GIAO DIỆN phần 3

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ực thi 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. | 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ực thi 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ác dòng bên dưới là sử dụng hệ thập lục phân IL_0023 isinst ICompressible IL 0028 IL 0039 IL_002a IL_002b castclass ICompressible IL_0030 IL_0031 IL_0032 callvirt IL_0037 IL_0039 ldstr instance void ICompressible Compress IL_0043 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 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ủa đối tượng. Do đó việc kiểm tra sẽ được thực hiện hai lần. Giải pháp hiệu quả hơn là việc sử dụng toán tử as. Toán tử as Toán tử as kết hợp toán tử is và phép gán bằng cách đầu tiên kiểm tra hợp lệ phép gán kiểm tra toán tử is trả về true rồi sau đó phép gán được thực hiện. Nếu phép gán không hợp lệ khi phép gán trả ề giá trị false thì toán tử as trả về giá trị null. Ghi chú Từ khóa null thể hiện một tham chiếu không tham chiếu đến đâu cả null reference . Đối tượng có giá trị null tức là không tham chiếu đến bất kỳ đối tượng nào. Sử dụng toán tử as để loại bỏ việc thực hiện các xử lý ngoại lệ. Đồng thời cũng né tránh việc thực hiện kiểm tra dư thừa hai lần. Do vậy việc sử dụng tối ưu của phép gán cho giao diện là sử dụng as. Cú pháp sử dụng toán tử as như sau biểu thức as kiểu dữ liệu Đoạn chương trình sau thay thế việc sử dụng toán tử is bằng toán tử as và sau đó thực hiện việc kiểm tra xem giao diện được gán có null hay không static void Main Document doc new Document Test Document IStorable isDoc doc as IStorable if isDoc null else .