2016-04-17 2 views
1
public class TestBase 
{ 
    // implementation 
} 
public class Test : ICollection<TestBase> 
{ 
    // implementation 
} 

Где-то у меня есть свойство типа испытаний:Как получить базовый тип универсального интерфейса?

public Test Test {get;set;} 

Как я могу получить базовый тип ICollection, что тест наследует от?

+0

Ваш вопрос действительно нуждается в уточнении .. 'Тест' не наследует ни от чего, он реализует' ICollection '. Попробуйте указать, какой тип вы ожидаете получить от метода, о котором вы, похоже, не можете думать: это 'TestBase' или' ICollection'? Уже есть ответы, предоставляющие оба, и я думаю, что вы, вероятно, хотите «TestBase», но это непонятно ... –

ответ

3

Возможно, что вы, вероятно, ищете GetGenericArguments().

var type = typeof(Test); 
var collInterface = type.GetInterfaces()[0]; 
var generic = collInterface.GetGenericArguments()[0]; 
+0

Спасибо, вот и все. – Alex

0

Пусть x является экземпляром класса, который реализует интерфейсы. Вы можете получить его типы iterface следующим образом:

var type = x.GetType(); 
var interfaces = type.GetInterfaces(); 

Edit: Я был ваш вопрос неправильно: Добейтесь «GetGenericArguments()», как предложено.

-1
Type t = typeof(Test); 
MethodInfo mi = t.GetMethod("MyMethod"); 
Type returnvalue = mi.ReturnType; 
Type answer = Nullable.GetUnderlyingType(returnvalue); 

Надеюсь, это поможет.

0

метод GetInterfaces возвращает все интерфейсы реализованы в текущем типе и его GetGenericArguments метод Возвращает список общих аргументов ведьма вы можете получить его базовый тип по BaseType собственности. этот пример возвращает иерархию классов родового аргумента базового интерфейса реализован в текущем классе:

вар MyType = this.GetType() GetInterfaces() Первый() GetGenericArguments() первый();.... while (myType! = Null)
{
Console.WriteLine (myType.Name);
myType = myType.BaseType;

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