检查对象类型是否继承了抽象类型
本文关键字:类型 抽象 抽象类 是否 对象 检查 继承 | 更新日期: 2023-09-27 18:16:32
假设我有一个对象someDrink
。它的类型可以是CocaCola
或Pepsi
,它们都继承了抽象的Cola
(它继承了Drink
)或任何一种饮料。我有一个方法,它返回最喜欢的饮料的字符串。
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");
}
上面的代码将不起作用,因为someCola
的类型永远不能等于抽象类型。理想情况下,我想这样做:
if (someCola is drinkType) ...
但是is
关键字只允许在它后面有一个类名。
是否有另一种方法来检查someDrink
是否继承了给定的类型?
当然,你可以使用Type.IsAssignableFrom
:
if (drinkType.IsAssignableFrom(someDrink.GetType()))
注意,不要把调用的目标和实参弄错,这一点很重要。我每次使用它都要查阅文档,幸运的是很少:)