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

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

Môt khi đã có đối tượng

ConstructorInfo

như mong muốn, hãy gọi phương thức

Invoke

của

nó. Bạn phải cung cấp một mảng chứa các đối số mà bạn muốn truyền cho phương thức khởi
dựng. Phương thức

Invoke

sẽ tạo đối tượng mới và trả về một tham chiếu đến đối tượng đó

(bạn phải ép về kiểu phù hợp). Dưới đây là đoạn mã trình bày cách tạo một đối tượng

System.Text.StringBuilder

, chỉ định nội dung ban đầu cho

StringBuilder

và sức chứa của

nó.

// Thu lấy đối tượng Type cho lớp StringBuilder.

Type type = typeof(System.Text.StringBuilder);

// Tạo Type[] chứa các đối tượng Type cho mỗi đối số

// của phương thức khởi dựng (một chuỗi và một số nguyên).

Type[] argTypes = new Type[] {typeof(System.String),

typeof(System.Int32)};

// Thu lấy đối tượng ConstructorInfo.

ConstructorInfo cInfo = type.GetConstructor(argTypes);

// Tạo object[] chứa các đối số cho phương thức khởi dựng.

object[] argVals = new object[] {"Some string", 30};

// Tạo đối tượng và ép nó về kiểu StringBuilder.

StringBuilder sb = (StringBuilder)cInfo.Invoke(argVals);

Chức năng phản chiếu thường được sử dụng để hiện thực các factory. Trong đó, bạn sử dụng
cơ chế phản chiếu để thể hiện hóa các lớp thừa kế một lớp cơ sở phổ biến hay hiện thực một
giao diện phổ biến. Thông thường, cả lớp cơ sở chung và giao diện chung đều được sử dụng.
Lớp cơ sở trừu tượng sẽ hiện thực giao diện và bất kỳ chức năng chung nào, sau đó mỗi hiện
thực cụ thê sẽ thừa kế lớp cơ sở.
Không có cơ chế nào để khai báo rằng mỗi lớp cụ thê phải hiện thực các phương thức khởi
dựng với các chữ ký cụ thể. Nếu muốn người khác (hãng thứ ba) hiện thực các lớp cụ thê thì
bạn phải chỉ rõ (trong tài liệu hướng dẫn) chữ ký của phương thức khởi dựng mà factory của
bạn gọi. Cách thông thường để tránh vấn đề này là sử dụng phương thức khởi dựng mặc định
(không có đối số), sau đó cấu hình đối tượng bằng phương thức và thuộc tính. Ví dụ dưới đây
sẽ hiện thực một factory dùng để tạo các đối tượng có hiện thực giao diện

IPlugin

.

using System;

using System.Reflection;

// Giao diện chung mà tất cả các plug-in phải hiện thực.

public interface IPlugin {

string Description { get; set; }

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.