106
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
11.
11.
Ki m tra ki u c a m t đ i t
ng
ể
ể ủ ộ ố ượ
Ki m tra ki u c a m t đ i t
ng
ể
ể ủ ộ ố ượ
Bạn muốn kiểm tra kiểu của một đối tượng.
Sử dụng phương thức thừa kế
Object.GetType
để thu lấy
Type
cho đối tượng này.
Trong vài trường hợp, bạn cũng có thể sử dụng toán tử
is
và
as
để kiểm tra kiểu
của một đối tượng.
Tất cả các kiểu dữ liệu đều thừa kế phương thức
GetType
từ lớp cơ sở
Object
. Như đã được
thảo luận trong mục 3.10, phương thức này trả về một tham chiếu
Type
mô tả kiểu của đối
tượng. Bộ thực thi duy trì một đối tượng
Type
cho mỗi kiểu được nạp và tất cả các tham chiếu
cho kiểu này cùng chỉ đến đối tượng này. Điều này nghĩa là bạn có thể so sánh hai tham chiếu
kiểu một cách hiệu quả. Ví dụ dưới đây trình bày cách kiểm tra một đối tượng có phải là
System.IO.StringReader
hay không:
// Tạo một StringReader để thử nghiệm.
Object someObject =
new StringReader("This is a StringReader");
// Kiểm tra xem someObject có phải là một StringReader hay không
// bằng cách thu lấy và so sánh tham chiếu Type (sử dụng toán tử typeof).
if (typeof(System.IO.StringReader) == someObject.GetType()) {
// Làm gì đó.
§
}
C# cung cấp toán tử
is
để thực hiện nhanh việc kiểm tra như trên. Ngoài ra,
is
sẽ trả về
true
nếu đối tượng cần kiểm tra dẫn xuất từ lớp được chỉ định. Đoạn mã dưới đây kiểm tra xem
someObject
là một thể hiện của
System.IO.TextReader
, hay một lớp dẫn xuất từ
TextReader
(như
StringReader
):
// Kiểm tra xem someObject là TextReader,
// hay dẫn xuất từ TextReader bằng toán tử is.
if (someObject is System.IO.TextReader) {
// Làm gì đó.
§
}
Cả hai cách này đều đòi hỏi kiểu dùng với toán tử
typeof
và
is
phải là kiểu đã biết và khả
phân giải lúc biên dịch. Một cách khác linh hoạt hơn (nhưng chậm hơn) là sử dụng phương
thức
Type.GetType
để trả về một tham chiếu
Type
cho kiểu được chỉ định. Tham chiếu
Type
không được phân giải cho đến khi thực thi, việc này ảnh hưởng đến hiệu năng, nhưng cho
phép bạn thay đổi phép so sánh kiểu lúc thực thi dựa trên giá trị của một chuỗi. Phương thức
IsType
dưới đây sẽ trả về
true
nếu đối tượng thuộc kiểu được chỉ định và sử dụng phương