1. Trang chủ
  2. » Công Nghệ Thông Tin

Miền ứng dụng ,cơ chế phản chiếu và siêu dữ liệu phần cuối

4 255 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Miền ứng dụng, cơ chế phản chiếu và siêu dữ liệu phần cuối
Thể loại Bài giảng
Định dạng
Số trang 4
Dung lượng 162 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sử dụng System.AttributeUsageAttribute để định nghĩa: • Những phần tử chương trình nào là đích của đặc tính • Bạn có thể áp dụng nhiều thể hiện của đặc tính cho một phần tử chương trì

Trang 1

# Lớp System.Activator cung cấp hai phương thức tĩnh CreateInstance và CreateInstanceFrom dùng để tạo các đối tượng dựa trên đối tượng Type hay

chuỗi chứa tên kiểu Xem tài liệu NET Framework SDK để biết thêm chi tiết

V Bạn cần tạo ra một đặc tính theo ý bạn

# Tạo một lớp dẫn xuất từ lớp cơ sở trừu tượng System.Attribute Hiện thực các phương thức khởi dựng, các trường, và các thuộc tính để cho phép người dùng cấu hình đặc tính Sử dụng System.AttributeUsageAttribute để định nghĩa:

• Những phần tử chương trình nào là đích của đặc tính

• Bạn có thể áp dụng nhiều thể hiện của đặc tính cho một phần tử chương

trình hay không

• Đặ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, hãy á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

Trang 2

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 là 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 {

private string company; // Công ty của tác giả

private string name; // Tên tác giả

// Khai báo phương thức khởi dựng công khai

public AuthorAttribute(string name) {

this.name = name;

company = "";

}

// Khai báo thuộc tính Company có quyền set/get

public string Company {

Trang 3

get { return company; }

set { company = value; }

}

// Khai báo thuộc tính Name chỉ-đọc

public string Name{

get { return name;}

}

}

Dưới đây là cách sử dụng AuthorAttribute:

// Khai báo Square Nguyen là tác giả của assembly

[assembly:Author("Square Nguyen", Company = "Goldsoft Ltd.")]

// Khai báo Square Nguyen là tác giả của lớp

[Author("Square Nguyen", Company = "Goldsoft Ltd.")]

public class SomeClass {

§

}

// Khai báo Stephen Chow là tác giả của lớp

[Author("Stephen Chow")]

public class SomeOtherClass {

§

}

các đặc tính của một phần tử chương trình

V 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ú

Trang 4

ý 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

object[] attrs =

type.GetCustomAttributes(typeof(AuthorAttribute), true);

// Liệt kê các đặc tính

foreach (AuthorAttribute a in attrs) {

Console.WriteLine(a.Name + ", " + a.Company);

}

// Nhấn Enter để kết thúc

Console.ReadLine();

}

}

Ngày đăng: 28/10/2013, 12:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w