Начну с объяснения моего сценария в коде:
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
}
}
Важная строка, на которую следует обратить внимание:
if ( c.GetType == typeof(B) ) { }
Я полагаю, что на самом деле это будет иметь значение «ложь», поскольку typeof (B) и typeof (C) не равны друг другу в обоих направлениях. (C представляет собой B, но B не обязательно представляет собой C.)
Но мне нужно какое-то условие, которое примет это во внимание. Как я могу определить, является ли объект B или чем-то производным от него?
Мне все равно, если это объект, ПОСЛЕДУЮЩИЙ из B, при условии, что существует базовый класс B. И я не могу предвидеть, какой производный класс может появиться в моем приложении. Я просто должен предположить, что неизвестные производные классы могут существовать в будущем - и поэтому я могу сосредоточиться только на том, чтобы убедиться, что базовый класс - это то, что я ожидаю.
Мне нужно условие, которое выполнит эту проверку для меня. Как это можно сделать?