2010-03-26 3 views
5

мне нужно использовать метод, как:Как получить класс типа

DoSomething<(T)>(); 

Но я не знаю, какой тип у меня есть, только объект класса типа. Как я могу назвать этот метод, если у меня есть только:

Type typeOfGeneric; 
+1

Ваш вопрос не очень ясен. Не могли бы вы привести более конкретный пример? –

+0

Нам потребуются более подробные сведения ... возможно, пример кода или два помогут. –

+0

@ Jon Skeet, действительно, вы не можете редактировать мужскую почту, пытаясь прояснить ее, как вы ее себе представляете, И жалуются, что сообщение не ясное ... :-) –

ответ

1

Если у вас есть только Тип, указанный как Тип, вам нужно будет создать общий метод и вызвать его через отражение.

Type thisType = this.GetType(); // Get your current class type 
MethodInfo doSomethingInfo = thisType.GetMethod("DoSomething"); 

MethodInfo concreteDoSomething = doSomethingInfo.MakeGenericMethod(typeOfGeneric); 
concreteDoSomething.Invoke(this, null); 
3

Вы можете использовать отражение (при условии DoSomething() статичен):

var methodInfo = typeOfGeneric.GetMethod("DoSomething"); 
methodInfo.Invoke(null, null); 

EDIT: Ваш вопрос изменения в то время как я написал ответ. Выше код для необщего метода, здесь для общего класса:

var constructedType = someType.MakeGenericMethod(typeOfGeneric); 
var methodInfo = constructedType.GetMethod("DoSomething"); 
methodInfo.Invoke(null, null); 

А вот для статического универсального метода на необщего класс:

var typeOfClass = typeof(ClassWithGenericStaticMethod); 

MethodInfo methodInfo = typeOfClass.GetMethod("DoSomething", 
    System.Reflection.BindingFlags.Static | BindingFlags.Public); 

MethodInfo genericMethodInfo = 
    methodInfo.MakeGenericMethod(new Type[] { typeOfGeneric }); 

genericMethodInfo.Invoke(null, new object[] { "hello" }); 
+0

I Думаю, ты не понял мой вопрос. Как передать объект типа как общий параметр? – wassertim

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