Giả sử tôi có đối tượng, someDrink
. Nó có thể thuộc loại CocaCola
hoặc Pepsi
mà cả hai đều thừa kế số Cola
trừu tượng (được thừa hưởng Drink
) hoặc bất kỳ loại thức uống nào cho vấn đề đó. Tôi có một phương thức trả về một chuỗi đồ uống ưa thích nhất.Kiểm tra xem loại đối tượng có kế thừa kiểu tóm tắt
public string PreferredDrink(Drink someDrink)
{
var orderOfPreference = new List<Type> {
typeof (Cola),
typeof (PurpleDrank),
typeof (LemonLimeBitters)
...
}
foreach (drinkType in orderOfPreference) {
if (someDrink.GetType() == drinkType) {
return someDrink.ToString()
}
}
throw new Exception("Water will be fine thank you");
}
Đoạn mã trên sẽ không làm việc, bởi vì loại someCola
bao giờ có thể bằng một loại trừu tượng. Lý tưởng nhất là tôi muốn làm điều gì đó như:
if (someCola is drinkType) ...
Nhưng từ khóa is
chỉ cho phép tên lớp sau đó.
Có cách nào khác để kiểm tra xem someDrink
có thừa kế một loại nhất định không?
Tái cấu trúc không phải là hoàn toàn ngoài câu hỏi nếu bạn có thể đề xuất cách tốt hơn để thực hiện việc này.
Umm, theo tài liệu trên [System.Object.GetType] (http://msdn.microsoft.com/en-us/ library/system.object.gettype.aspx), nó trả về kiểu * thời gian chạy * chính xác của đối tượng. Vì vậy, nó sẽ không bao giờ trả lại "Uống rượu" trong trường hợp của bạn. Có thể có điều gì đó sai với mã gọi phương thức của bạn. – Strelok