Используя отражение, я пытаюсь найти набор типов, которые наследуются от данного базового класса. Это не заняло много времени, чтобы разобраться в простых типах, но я в тупике, когда дело доходит до дженериков.
Для этого фрагмента кода первый IsAssignableFrom возвращает true, а второй возвращает false. И все же окончательное присваивание компилируется просто отлично.
class class1 { }
class class2 : class1 { }
class generic1<T> { }
class generic2<T> : generic1<T> { }
class Program
{
static void Main(string[] args)
{
Type c1 = typeof(class1);
Type c2 = typeof(class2);
Console.WriteLine("c1.IsAssignableFrom(c2): {0}", c1.IsAssignableFrom(c2));
Type g1 = typeof(generic1<>);
Type g2 = typeof(generic2<>);
Console.WriteLine("g1.IsAssignableFrom(g2): {0}", g1.IsAssignableFrom(g2));
generic1<class1> cc = new generic2<class1>();
}
}
Итак, как мне определить во время выполнения, выводится ли одно общее определение типа из другого?