Digamos que tengo un objeto, someDrink
. Puede ser del tipo CocaCola
o Pepsi
, que heredan el resumen Cola
(que hereda Drink
) o cualquier tipo de bebida para el caso. Tengo un método que devuelve una cadena de la bebida más preferida.Compruebe si los objetos tipo heredan un tipo abstracto
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");
}
El código anterior no funcionará, porque el tipo de someCola
nunca puede ser igual a un tipo abstracto. Idealmente me gustaría hacer algo como:
if (someCola is drinkType) ...
Pero la palabra clave is
sólo permite un nombre de clase después de ella.
¿Hay alguna otra forma de comprobar si someDrink
hereda un tipo determinado?
La refabricación no es totalmente si no puede sugerir una forma mejor de hacerlo.
Umm, de acuerdo con la documentación de [System.Object.GetType] (http://msdn.microsoft.com/en-us/ library/system.object.gettype.aspx), devuelve el * exact * tipo de tiempo de ejecución del objeto. Por lo tanto, nunca devolverá 'Bebe 'en su caso. Tal vez hay algo mal con el código llamando a su método. – Strelok