检查对象类型是否继承了抽象类型

本文关键字:类型 抽象 抽象类 是否 对象 检查 继承 | 更新日期: 2023-09-27 18:16:32

假设我有一个对象someDrink。它的类型可以是CocaColaPepsi,它们都继承了抽象的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()))

注意,不要把调用的目标和实参弄错,这一点很重要。我每次使用它都要查阅文档,幸运的是很少:)