CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 111

111

Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu

Đặc tính có được thừa kế bởi các kiểu dẫn xuất hay không

Đặc tính cung cấp một cơ chế tổng quát cho việc kết hợp thông tin khai báo (siêu dữ liệu) với
các phần tử chương trình. Siêu dữ liệu này nằm trong assembly đã được biên dịch, cho phép
các chương trình thu lấy nó thông qua cơ chế phản chiếu lúc thực thi (xem mục 3.14.) Các
chương trình khác, đặc biệt là CLR, sử dụng thông tin này để xác định cách thức tương tác và
quản lý các phần tử chương trình.
Để tạo một đặc tính tùy biến thì hãy dẫn xuất một lớp từ lớp cơ sở trừu tượng

System.Attribute

. Các lớp đặc tính tùy biến phải là

public

và có tên kết thúc bằng

Attribute

”. Một đặc tính tùy biến phải có ít nhất một phương thức khởi dựng công khai. Các

đôi sô của phương thức khởi dựng sẽ trở thành các đôi sô vị trí (positional parameter) của đặc
tính. Như với bất kỳ lớp nào khác, bạn có thể khai báo nhiều phương thức khởi dựng, cho
phép người dùng tùy chọn sử dụng các tập khác nhau của các đối sô vị trí khi áp dụng đặc
tính. Bất kỳ thuộc tính và trường đọc/ghi công khai nào do đặc tính khai báo đều trở thành đối
sô được nêu tên (named parameter).
Để điều khiển cách thức người dùng áp dụng đặc tính, hay áp dụng đặc tính

AttributeUsageAttribute

cho đặc tính tùy biến của bạn. Đặc tính

AttributeUsageAttribute

hỗ trợ một đối sô vị trí và hai đối sô được nêu tên, được mô tả trong bảng 3.3. Các giá trị mặc
định chỉ định giá trị sẽ được áp dụng cho đặc tính tùy biến của bạn nếu bạn không áp dụng

AttributeUsageAttribute

hoặc không chỉ định giá trị cho một thông số.

Bảng 3.3 Các thành viên thuộc kiểu liệt kê AttributeUsage

Thông số

Kiểu

Mô tả

Mặc định

ValidOn

vị trí

Một thành viên thuộc kiểu liệt kê

System.AttributeTargets

, chỉ định

phần tử chương trình mà đặc tính sẽ
có hiệu lực trên đó.

AttributeTargets.All

AllowMultiple

được nêu

tên

Đặc tính có thể được chỉ định nhiều
lần cho một phần tử hay không.

false

Inherited

được nêu

tên

Đặc tính có được thừa kế bởi các lớp
dẫn xuất hay các thành viên được
chép đè hay không.

true

Ví dụ dưới đây trình bày cách tạo một đặc tính tùy biến có tên là

AuthorAttribute

, cho phép

bạn xác định tên và công ty của người tạo ra lớp hay assembly.

AuthorAttribute

khai báo một

phương thức khởi dựng công khai, nhận một chuỗi chứa tên tác giả. Điều này yêu cầu người
sử dụng

AuthorAttribute

phải luôn cung cấp một đối sô vị trí chứa tên tác giả.

Company

thuộc tính công khai (có thể dùng làm đối sô được nêu tên),

Name

là thuộc tính chỉ-đọc (không

thể dùng làm đối sô được nêu tên).

using System;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly,

AllowMultiple = true, Inherited = false)]

public class AuthorAttribute : System.Attribute {

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.