Начну с объяснения моего сценария в коде:
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. И я не могу предвидеть, какой производный класс может появиться в моем приложении. Я просто должен предположить, что неявные производные классы могут существовать в будущем - и поэтому я могу сосредоточиться только на том, чтобы базовый класс был тем, чего я ожидаю.
Мне нужно условие, которое будет выполнять эту проверку для меня. Как это можно сделать?