Voy a empezar por explicar mi escenario en el código:C# .NET - ¿Cómo puedo obtener typeof() para trabajar con la herencia?
public class A { }
public class B : A { }
public class C : B { }
public class D { }
public class Test
{
private A a = new A () ;
private B b = new B () ;
private C c = new C () ;
private D d = new D () ;
public Test ()
{
// Evaluates to "false"
if (a.GetType == typeof(B)) { } //TODO: Add Logic
// Evaluates to "true"
if (b.GetType == typeof(B)) { } //TODO: Add Logic
// I WANT this to evaluate to "true"
if (c.GetType == typeof(B)) { } //TODO: Add Logic
// Evaluates to "false"
if (d.GetType == typeof(B)) { } //TODO: Add Logic
}
}
La línea importante tomar nota de que aquí es:
if (c.GetType == typeof(B)) { }
que creen que esto, de hecho, se evalúa como " falso ", ya que typeof (B) y typeof (C) no son iguales entre sí en ambas direcciones. (C es una B, pero B no es necesariamente una C.)
Pero lo que necesito es algún tipo de condición que tenga esto en cuenta. ¿Cómo puedo saber si un objeto es un B o algo derivado de él?
No me importa si se trata de un objeto DERIVADO de B, siempre que la clase B base esté allí. Y no puedo anticipar qué clase derivada podría aparecer en mi aplicación. Solo tengo que suponer que las clases derivadas desconocidas pueden existir en el futuro y, por lo tanto, solo puedo enfocarme en asegurarme de que la clase base es lo que estoy esperando.
Necesito una condición que realice esta comprobación por mí. ¿Cómo se puede lograr esto?
Debe evitar este tipo de lógica cuando sea posible. Cuando tiene que determinar cuál es el tipo derivado de un objeto, no está haciendo un buen uso del polimorfismo. –
Ver mi comentario sobre la respuesta de Steven Sudit. – Giffyguy