113
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
}
14.
14.
S d ng c ch ph n chi u đ ki m tra
ử ụ
ơ ế ả
ế ể ể
S d ng c ch ph n chi u đ ki m tra
ử ụ
ơ ế ả
ế ể ể
các đ c tính c a m t ph n t ch
ng trình
ặ
ủ ộ
ầ ử ươ
các đ c tính c a m t ph n t ch
ng trình
ặ
ủ ộ
ầ ử ươ
Bạn muốn sử dụng cơ chế phản chiếu để kiểm tra các đặc tính tùy biến đã được
áp dụng cho một phần tử chương trình.
Gọi phương thức
GetCustomAttributes
của đối tượng dẫn xuất từ lớp
System.Reflection.MemberInfo
(đối tượng này mô tả phần tử chương trình cần
kiểm tra).
Tất cả các lớp mô tả các phần tử chương trình đều dẫn xuất từ lớp
MemberInfo
. Lớp này bao
gồm
Type
,
EventInfo
,
FieldInfo
,
PropertyInfo
, và
MethodBase
.
MethodBase
có thêm hai lớp
con:
ConstructorInfo
và
MethodInfo
. Bạn có thể gọi phương thức
GetCustomAttributes
nếu
có được bất kì đối tượng nào của các lớp này. Phương thức này sẽ trả về mảng chứa các đặc
tính tùy biến đã được áp dụng cho phần tử chương trình. Chú ý là mảng này chỉ chứa các đặc
tính tùy biến chứ không chứa các đặc tính có sẵn trong thư viện các lớp cơ sở của .NET
Framework.
Phương thức
GetCustomAttributes
có hai dạng thức. Dạng đầu tiên nhận một đối số
bool
để
xác định phương thức này có trả về các đặc tính được thừa kế từ các lớp cha hay không. Dạng
thứ hai nhận thêm một đối số
Type
có vai trò như một bộ lọc, kết quả trả về là các đặc tính
thuộc kiểu đã được chỉ định bởi
Type
.
Ví dụ sau sử dụng đặc tính tùy biến
AuthorAttribute
đã được khai báo trong mục 3.13 và áp
dụng nó vào lớp
GetCustomAttributesExample
. Phương thức
Main
sẽ gọi phương thức
GetCustomAttributes
, lọc các đặc tính để kết quả trả về chỉ có các thể hiện của
AuthorAttribute
. Bạn có thể thực hiện ép kiểu an toàn các đặc tính này về tham chiếu
AuthorAttribute
và truy xuất các thành viên của chúng mà không cần sử dụng cơ chế phản
chiếu.
using System;
[Author("Stephen Chau")]
[Author("Square Nguyen", Company = "Goldsoft Ltd.")]
public class GetCustomAttributesExample {
public static void Main() {
// Lấy đối tượng Type cho chính lớp này.
Type type = typeof(GetCustomAttributesExample);
// Lấy các đặc tính cho kiểu này. Sử dụng bộ lọc để
// kết quả trả về chỉ có các thể hiện của AuthorAttribute.