Danh mục

Những chủ đề tiến bộ trong C# - Attribute

Số trang: 7      Loại file: pdf      Dung lượng: 99.12 KB      Lượt xem: 14      Lượt tải: 0    
Thu Hiền

Hỗ trợ phí lưu trữ khi tải xuống: 1,000 VND Tải xuống file đầy đủ (7 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

1 attribute là 1 thứ dùng để đánh dấu (marker) mà được ứng dụng đến 1 phương thức hay 1 lớp thậm chí là 1 đối số riêng trong 1 phưong thức ,cung cấp thông tin thêm về mục đó. ví dụ attribute Conditional có thể được dùng để đánh dấu 1 phương thức như là 1 phương thức debug như sau : [Conditional("DEBUG")] public void DoSomeDebugStuff() { // do something }
Nội dung trích xuất từ tài liệu:
Những chủ đề tiến bộ trong C# - Attribute Những chủ đề tiến bộ trong C# Attribute1 attribute là 1 thứ dùng để đánh dấu (marker) mà được ứng dụng đến 1phương thức hay 1 lớp thậm chí là 1 đối số riêng trong 1 phưong thức ,cungcấp thông tin thêm về mục đó. ví dụ attribute Conditional có thể được dùngđể đánh dấu 1 phương thức như là 1 phương thức debug như sau :[Conditional(DEBUG)]public void DoSomeDebugStuff(){// do something}Để áp dụng 1 attribute đến 1 mục ta cung cấp tên của attribute trong ngoặcvuông ngay trước định nghĩa mục. các attribute lấy vài thông số - nhữngthông số này cung cấp bên trong dấu ngoặc theo sau tên attributeỞ cấp độ cơ bản nhất của nó , ứng dụng 1 attribute vào 1 mục có thể đơngiản chỉ là thông tin thêm về mục đó đựợc bỏ trong assembly đuợc biên dịchdùng cho mục đích hướng dẫn thêm. 1 số attribute được định nghĩa trong cáclớp cơ sở đuợc nhận ra bởi trình biên dịch C#.mà từ đó trình biên dịch có thểgây ra những tác động trên mã . ví dụ trên trình biên dịch sẽ biên dịch mãcủa mục Conditional chỉ nếu biểu tượng DEBUG đã được định nghĩa trước.Trong phần này ta sẽ xem xét 3 attribute sau : - Conditional : có thể đánh dấu bất kì phương thức với attributeConditional . sẽ ngăn ngừa trình biên dịch từ việc biên dịch phương thức đóhay bất kì câu lệnh mà tham khảo đến nó nếu tên biểu tượng không đượcđịnh nghĩa. điều này có thể được dùng cho điều kiện biên dịch . - Dllimport - đôi khi ta cần truy nhập đến các Window API cơ bản hoặccác hàm kiểu cũ khác mà được thực thi trong các window DLLs.attributeDllimport dùng cho mục đích này . nó được dùng đánh dấu 1 phương thứcđược định nfghĩa trong Dll bên ngoài. - Obsolete - attribute này được dùng để đánh dấu 1 phương thức đượcxem như obsolete ( không dùng nữa) . tuỳ thuộc vào việc thiết lập trênattribute này , trình biên dịch sẽ sinh ra 1 cảnh báo hay lỗi nếu nó gặp bất k ìmã nào cố gắng dùng phương thức này.Ta xem xét các attribute này thông qua ví dụ Attributes . trình bày 1 messagebox dùng hàm Window API ,MessageBox , và cũng trình bày 2 thông điệpvá lỗi. 1 trong những thông điệp này được gọi trung gian qua 1 phương thứcobsolete#define DEBUG // comment out this line if doing a release buildusing System;using System.Runtime.InteropServices;using System.Diagnostics;namespace Wrox.ProCSharp.AdvancedCSharp{ class MainEntryPoint { [DllImport(User32.dll)] public static extern int MessageBox(int hParent, string Message, string Caption, int Type); static void Main() { DisplayRunningMessage(); DisplayDebugMessage(); MessageBox(0, Hello, Message, 0); } [Conditional(DEBUG)] private static void DisplayRunningMessage() { Console.WriteLine(Starting Main routine. Current time is + DateTime.Now); } [Conditional(DEBUG)] [Obsolete()] private static void DisplayDebugMessage() { Console.WriteLine(Starting Main routine); }}}Đầu tiên ta chỉ định một số namespace - DllImport nằm trong namespace System.Runtime.InteropServices - Conditional nằm trong namespace System.Diagnostics .Bên trong phương thức ta định nghĩa phương thức mà ta gọi từ dll bên ngoài.hàm API MessageBox() đuợc định nghĩa trong User32.dll, vì thế ta truyềntên tập tin vào attribute DllImport . ta khai báo hàm giống như trong C.Tiếp theo trong phương thức DisplayDebugMessage() , ta chỉ muốn phươngthức này chạy nếu ta đang làm 1 xây dựng vá lỗi, vì thế ta đánh dấu nó nhưlà conditional trên biểu tượng DEBUG .ta cũng xem phương thức này là 1 bởi vì đã viết một phiên bản tốt hơn,obsoblete , taDisplayRunningMessage(), mà trình bày thêm thời gian và ngày tháng.takhông khuyến khích mọi người dùng DisplayDebugMessage() thêm nữa, vìthế ta đánh dấu nó với attribute Obsolete để trình biên dịch sẽ trình bày 1cảnh báo nếu phương thức này được dùng. có 1 vài kiểu overload của hàmnày :[Obsolete(The DisplayDebugMessage is obsolete. Use +DisplayRunningMessage instead.)]Hàm này sẽ sinh ra một cảnh báo nếu phương thức này được dùng, trong khi:[Obsolete(The DisplayDebugMessage is obsolete. Use +DisplayRunningMessage instead., true)]sẽ gây ra lỗi biên dịch thay vì là 1 cảnh báo nếu phương thức này được dùng.thông số thứ hai quy định đây là lỗi hay là cảnh báo nếu obsolete được dùng.Về attribute Conditional , đây là 1 attribute phức tạp , bởi vì nếu điều kiệnkhông hợp, trình biên dịch không chỉ không biên dịch đoạn mã trongphương thức mà còn tự động bỏ qua bất kì dòng nào mã khác trong tập tinnguồn mà gọi phương thức này . để trình biên dịch có khả năng làm điều nàyphương thức phải trả về void . attribute Conditional chỉ có thể áp dụng đếnphương ...

Tài liệu được xem nhiều: