2015-08-29 6 views
1

Предполагая, что у меня есть класс А:C# - Как получить конкретный тип базы родовое

class A : B<C>, IA 
{ 

} 

И у меня есть метод, как это:

Type GetConcreteB<T>() where T : IA 
{ 
//some code here... 
} 

В этом методе я хотел бы чтобы проверить, наследуется ли T от любого B (в настоящее время я обертываю B в интерфейс IB, который делает это), и если да, то возвращаем конкретный тип C.

Итак, в основном я хочу вернуть конкретный тип базового базового класса только с использованием типа подкласса. Есть ли способ достичь этого?

+0

возможный дубликат [Проверьте, если класс является производным от универсального класса] (HTTP: // stackoverflow.com/questions/457676/check-if-a-class-is-derived-from-a-generic-class) –

ответ

5

С помощью отражения, пройти через иерархию классов, пока вы не найдете B<T>, а затем извлечь T:

static Type GetConcreteB<T>() 
    where T : IA 
{ 
    var t = typeof(T); 
    while (t != null) { 
     if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(B<>)) 
      return t.GetGenericArguments()[0]; 

     t = t.BaseType; 
    } 

    return null; 
} 
+0

Именно то, что я искал! Большое спасибо! – bashis

Смежные вопросы