C# và các lớp cơ sở Attribute tuỳ chọn
Số trang: 14
Loại file: pdf
Dung lượng: 117.38 KB
Lượt xem: 17
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:
Trong chương 4 ta đã xem xét một số attribute được định nghĩa trên một số mục của chương trình.Đó là các attribute mà trình biên dịch biết cách xử lý .trong phần này ta sẽ xét việc định nghĩa các attribute của riêng ta .nếu ta làm điều này có thể các attribute này sẽ không được thừa nhận như là dữ liệu thêm (metadata) để trình biên dịch có thể xử lí. nhưng các metadata này có thể hữu ích cho mục đích tài liệu hướng dẫn .tuy nhiên, bằng cách dùng các lớp trong namespace System.Reflection,...
Nội dung trích xuất từ tài liệu:
C# và các lớp cơ sở Attribute tuỳ chọn C# và các lớp cơ sở Attribute tuỳ chọnTrong chương 4 ta đã xem xét một số attribute được định nghĩa trên một sốmục của chương trình.Đó là các attribute mà trình biên dịch biết cách xử lý.trong phần này ta sẽ xét việc định nghĩa các attribute của riêng ta .nếu talàm điều này có thể các attribute này sẽ không được thừa nhận như là dữ liệuthêm (metadata) để trình biên dịch có thể xử lí. nhưng các metadata này cóthể hữu ích cho mục đích tài liệu hướng dẫn .tuy nhiên, bằng cách dùng cáclớp trong namespace System.Reflection, mã của ta có thể đọc được cácmetadata vào lúc chạy.nghĩa là các attribute tùy chọn mà ta định nghĩa cóthể ảnh hưởng trực tiếp đến cách mà mã chạy.Viết attribute tuỳ chọnĐể hiểu cách viết attribute tuỳ chọn, ta cần xem trình biên dịch làm gì khi nógặp 1 mục trong mã được đánh dấu với 1 attribute, mà việc hổ trợ khôngtường minh không được xây dựng trong trình biên dịch.giả sử ta có thuộctính khai báo như sau:[FieldName(SocialSecurityNumber)]public string SocialSecurityNumber{get {// vv...Như ta thấy thuộc tính này có 1 attribute ,Fieldname, trình biên dịch sẽ nốichuổi attribute với tên này thành FieldNameattribute, sau đó tìm trong tất cảcác namespace ( đưọc đề cập trong using ) lớp có tên này.tuy nhiên nếu tađánh dấu 1 mục với 1 attribute mà tên của nó có phần cuối là attribute thìtrình biên dịch sẽ không thêm chuỗi attribute lần nữa ví dụ:[FieldNameattribute(SocialSecurityNumber)]public string SocialSecurityNumber{// vv...Nếu trình biên dịch không tìm thấy 1 lớp attribute đáp ứng, hoặc thấy nhưngcách mà ta dùng attribute không phù hợp với thông tin trong lớp attribute.thìtrình biên dịch sẽ sinh ra lỗi.Các lớp attribute tuỳ chọnGiả sử như ta đã định nghĩa 1 attribute FieldName như sau :[AttributeUsage(AttributeTargets.Property, AllowMultiple=false, Inherited=false)]public class FieldNameAttribute : Attribute{ private string name; public FieldNameAttribute(string name) { this.name = name; }}Attribute attributeUsageĐiều đầu tiên ta chú ý là lớp attribute được đánh dấu với 1 attribute -attributeUsage .attributeUsage chỉ định các mục nào trong mã của ta attribute tuỳ chọn đượcáp dụng. thông tin này được cho bởi thông số đầu tiên, mà phải được trìnhbày. thông số này là 1 kiểu liệt kê,attributeTargets .trong ví dụ trên ta chỉđịnh attribute Fieldname có thể chỉ ứng dụng đến các thuộc tính. định nghĩacủa kiểu liệt kê attributeTargets là :public enum attributeTargets{All = 0x00003FFF,Assembly = 0x00000001,Class = 0x00000004,Constructor = 0x00000020,Delegate = 0x00001000,Enum = 0x00000010,Event = 0x00000200,Field = 0x00000100,Interface = 0x00000400,Method = 0x00000040,Module = 0x00000002,Parameter = 0x00000800,Property = 0x00000080,ReturnValue = 0x00002000,Struct = 0x00000008}Danh sách cho ta tất cả các attribute có thể đưọc áp dụng.khi áp dụngattribute đến các phần tử chương trình , ta đặt attribute trong ngoặc vuôngngay trước phần tử. tuy nhiên có 1 giá trị trong dánh sách trên không phùhợp đến bất kì phần tử nào trong chương trình :Assembly . 1 attribute có thểđược áp dụng đến 1 Assembly như là thay thế hoàn toàn 1 phần tử trong mã.trong trường hợp này attribute có thể được đặt ở bất cứ đâu trong mã nguồn,nhưng cần được đánh dấu với từ khoá Assembly:[assembly: SomeAssemblyattribute(Parameters)]Ta có thể kết hợp nhiều kiểu áp dụng trên các phần tử ta dùng các tác tử, vídụ như ta chỉ định attribute Fielaname có thể áp dụng đến 1 property hay 1field ta viết như sau :[attributeUsage(attributeTargets.Property | attributeTargets.Field,AllowMultiple=false,Inherited=false)]public class FieldNameattribute : attributeTa cũng có thể dùng attributeTargets.All để áp dụng attribute ở mọi nơi.attribute attributeUsage còn chứa 2 thông số khác là AllowMultiple andInherited. chỉ định với cú pháp khác của =,.thông số này là tuỳ chọn.thông số AllowMultiple chỉ định 1 attribute có thể áp dụng nhiều hơn 1 lầnđến cùng 1 mục.nếu thiết đặt là false thì trình biên dịch sẽ thông báo lỗi nếunó thấy :[FieldName(SocialSecurityNumber)][FieldName(NationalInsuranceNumber)]public string SocialSecurityNumber{// vv...Nếu thông số Inherited là true, thì 1 attribute có thể áp dụng đến 1 lớp hay 1interface cũng sẽ được áp dụng đến tất cả các lớp hay interface được thừakế.nếu attribute được áp dụng đến phương thức hay thuộc tính thì nó tự độngáp dụng đến bất kì override của phương thức hay thuộc tính đó.Đặc tả các thông số attributeTa sẽ kiểm tra làm thế nào ta có thể chỉ định bất kì thông số mà attribute tuỳchọn nhận.cách nó làm việc khi trình biên dịch gặp 1 lệnh như :[FieldName(SocialSecurityNumber)]public string SocialSecurityNumber{// etc.Nó kiểm tra thông số truyền vào a ...
Nội dung trích xuất từ tài liệu:
C# và các lớp cơ sở Attribute tuỳ chọn C# và các lớp cơ sở Attribute tuỳ chọnTrong chương 4 ta đã xem xét một số attribute được định nghĩa trên một sốmục của chương trình.Đó là các attribute mà trình biên dịch biết cách xử lý.trong phần này ta sẽ xét việc định nghĩa các attribute của riêng ta .nếu talàm điều này có thể các attribute này sẽ không được thừa nhận như là dữ liệuthêm (metadata) để trình biên dịch có thể xử lí. nhưng các metadata này cóthể hữu ích cho mục đích tài liệu hướng dẫn .tuy nhiên, bằng cách dùng cáclớp trong namespace System.Reflection, mã của ta có thể đọc được cácmetadata vào lúc chạy.nghĩa là các attribute tùy chọn mà ta định nghĩa cóthể ảnh hưởng trực tiếp đến cách mà mã chạy.Viết attribute tuỳ chọnĐể hiểu cách viết attribute tuỳ chọn, ta cần xem trình biên dịch làm gì khi nógặp 1 mục trong mã được đánh dấu với 1 attribute, mà việc hổ trợ khôngtường minh không được xây dựng trong trình biên dịch.giả sử ta có thuộctính khai báo như sau:[FieldName(SocialSecurityNumber)]public string SocialSecurityNumber{get {// vv...Như ta thấy thuộc tính này có 1 attribute ,Fieldname, trình biên dịch sẽ nốichuổi attribute với tên này thành FieldNameattribute, sau đó tìm trong tất cảcác namespace ( đưọc đề cập trong using ) lớp có tên này.tuy nhiên nếu tađánh dấu 1 mục với 1 attribute mà tên của nó có phần cuối là attribute thìtrình biên dịch sẽ không thêm chuỗi attribute lần nữa ví dụ:[FieldNameattribute(SocialSecurityNumber)]public string SocialSecurityNumber{// vv...Nếu trình biên dịch không tìm thấy 1 lớp attribute đáp ứng, hoặc thấy nhưngcách mà ta dùng attribute không phù hợp với thông tin trong lớp attribute.thìtrình biên dịch sẽ sinh ra lỗi.Các lớp attribute tuỳ chọnGiả sử như ta đã định nghĩa 1 attribute FieldName như sau :[AttributeUsage(AttributeTargets.Property, AllowMultiple=false, Inherited=false)]public class FieldNameAttribute : Attribute{ private string name; public FieldNameAttribute(string name) { this.name = name; }}Attribute attributeUsageĐiều đầu tiên ta chú ý là lớp attribute được đánh dấu với 1 attribute -attributeUsage .attributeUsage chỉ định các mục nào trong mã của ta attribute tuỳ chọn đượcáp dụng. thông tin này được cho bởi thông số đầu tiên, mà phải được trìnhbày. thông số này là 1 kiểu liệt kê,attributeTargets .trong ví dụ trên ta chỉđịnh attribute Fieldname có thể chỉ ứng dụng đến các thuộc tính. định nghĩacủa kiểu liệt kê attributeTargets là :public enum attributeTargets{All = 0x00003FFF,Assembly = 0x00000001,Class = 0x00000004,Constructor = 0x00000020,Delegate = 0x00001000,Enum = 0x00000010,Event = 0x00000200,Field = 0x00000100,Interface = 0x00000400,Method = 0x00000040,Module = 0x00000002,Parameter = 0x00000800,Property = 0x00000080,ReturnValue = 0x00002000,Struct = 0x00000008}Danh sách cho ta tất cả các attribute có thể đưọc áp dụng.khi áp dụngattribute đến các phần tử chương trình , ta đặt attribute trong ngoặc vuôngngay trước phần tử. tuy nhiên có 1 giá trị trong dánh sách trên không phùhợp đến bất kì phần tử nào trong chương trình :Assembly . 1 attribute có thểđược áp dụng đến 1 Assembly như là thay thế hoàn toàn 1 phần tử trong mã.trong trường hợp này attribute có thể được đặt ở bất cứ đâu trong mã nguồn,nhưng cần được đánh dấu với từ khoá Assembly:[assembly: SomeAssemblyattribute(Parameters)]Ta có thể kết hợp nhiều kiểu áp dụng trên các phần tử ta dùng các tác tử, vídụ như ta chỉ định attribute Fielaname có thể áp dụng đến 1 property hay 1field ta viết như sau :[attributeUsage(attributeTargets.Property | attributeTargets.Field,AllowMultiple=false,Inherited=false)]public class FieldNameattribute : attributeTa cũng có thể dùng attributeTargets.All để áp dụng attribute ở mọi nơi.attribute attributeUsage còn chứa 2 thông số khác là AllowMultiple andInherited. chỉ định với cú pháp khác của =,.thông số này là tuỳ chọn.thông số AllowMultiple chỉ định 1 attribute có thể áp dụng nhiều hơn 1 lầnđến cùng 1 mục.nếu thiết đặt là false thì trình biên dịch sẽ thông báo lỗi nếunó thấy :[FieldName(SocialSecurityNumber)][FieldName(NationalInsuranceNumber)]public string SocialSecurityNumber{// vv...Nếu thông số Inherited là true, thì 1 attribute có thể áp dụng đến 1 lớp hay 1interface cũng sẽ được áp dụng đến tất cả các lớp hay interface được thừakế.nếu attribute được áp dụng đến phương thức hay thuộc tính thì nó tự độngáp dụng đến bất kì override của phương thức hay thuộc tính đó.Đặc tả các thông số attributeTa sẽ kiểm tra làm thế nào ta có thể chỉ định bất kì thông số mà attribute tuỳchọn nhận.cách nó làm việc khi trình biên dịch gặp 1 lệnh như :[FieldName(SocialSecurityNumber)]public string SocialSecurityNumber{// etc.Nó kiểm tra thông số truyền vào a ...
Tìm kiếm theo từ khóa liên quan:
lập trình tài liệu lập trình kỹ thuật lập trình giáo trình C ngôn ngữ lập trình C tự học lập trình với CTài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 278 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 218 0 0 -
101 trang 205 1 0
-
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 204 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 175 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 156 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 151 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 137 0 0 -
161 trang 134 1 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 126 0 0