107
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
thức
Type.IsSubclassOf
để kiểm tra đối tượng này có phải là một lớp con của kiểu được chỉ
định hay không.
public static bool IsType(object obj, string type) {
Type t = Type.GetType(type, true, true);
return t == obj.GetType() || obj.GetType().IsSubclassOf(t);
}
Cuối cùng, bạn có thể sử dụng toán tử
as
để ép bất kỳ đối tượng nào sang kiểu được chỉ định.
Nếu đối tượng không thể bị ép sang kiểu được chỉ định, toán tử
as
sẽ trả về
null
. Điều này
cho phép bạn thực hiện các phép ép kiểu an toàn (safe cast), nhưng kiểu được so sánh phải là
khả phân giải lúc thực thi. Dưới đây là một ví dụ:
// Sử dụng toán tử as để thực hiện một phép ép kiểu an toàn.
StringReader reader = someObject as System.IO.StringReader;
if (reader != null) {
// Làm gì đó.
§
}
Phương thức tĩnh
GetUnderlyingType
của lớp
System.Enum
cho phép bạn thu lấy
kiểu thưc sư của một kiểu liệt kê.
12.
12.
T o m t đ i t
ng b ng c ch ph n chi u
ạ ộ ố ượ
ằ
ơ ế ả
ế
T o m t đ i t
ng b ng c ch ph n chi u
ạ ộ ố ượ
ằ
ơ ế ả
ế
Bạn cần tạo một đối tượng bằng cơ chế phản chiếu.
Thu lấy đối tượng
Type
mô tả kiểu của đối tượng cần tạo, gọi phương thức
GetConstructor
của nó để có được đối tượng
System.Reflection.ConstructorInfo
mô tả phương thức khởi dựng cần dùng, sau đó thực thi phương thức
ConstructorInfo.Invoke
.
Bước đầu tiên trong việc tạo một đối tượng bằng cơ chế phản chiếu là thu lấy đối tượng
Type
mô tả kiểu của đối tượng cần tạo (xem mục 3.10 để biết thêm chi tiết). Khi có được đối tượng
Type
, hãy gọi phương thức
GetConstructor
để thu lấy đối tượng
ConstructorInfo
mô tả một
trong các phương thức khởi dựng của kiểu này. Dạng thức thông dụng nhất của phương thức
GetConstructor
là nhận một mảng
Type
làm đối số, và trả về đối tượng
ConstructorInfo
mô
tả phương thức khởi dựng nhận các đối số được chỉ định trong mảng
Type
. Để thu lấy đối
tượng
ConstructorInfo
mô tả phương thức khởi dựng mặc định (không có đối số), bạn hãy
truyền cho phương thức
GetConstructor
một mảng
Type
rỗng (sử dụng trường tĩnh
Type.EmptyTypes
); đừng sử dụng
null
, nếu không
GetConstructor
sẽ ném ngoại lệ
System.ArgumentNullException
. Nếu
GetConstructor
không tìm thấy phương thức khởi dựng
nào có chữ ký phù hợp với các đối số được chỉ định thì nó sẽ trả về
null
.