2009-09-04 8 views
13

Konstruktor wygląda następująco:Jak zdobyć konstruktora jako MethodInfo użyciu odbicia

public NameAndValue(string name, string value) 

Muszę go jako MethodInfo użyciu odbicia. Próbowano wykonać następujące czynności, ale nie znaleziono konstruktora (GetMethod zwraca null).

MethodInfo constructor = typeof(NameAndValue).GetMethod(".ctor", new[] { typeof(string), typeof(string) }); 

Co robię źle?

Odpowiedz

9

Type.GetConstructor. Zauważ, że to zwraca ConstructorInfo zamiast MethodInfo, ale oba pochodzą z MethodBase, więc mają w większości tych samych członków.

5
ConstructorInfo constructor = typeof(NameAndValue).GetConstructor 
     (new Type[] { typeof(string), typeof(string) }); 

Trzeba elementy potrzebne w ConstructorInfo, znam żadnego sposobu, aby uzyskać MethodInfo dla konstruktora chociaż.

Dobroć,

Dan

+0

Już wiedziałem, jak uzyskać ConstructorInfo, ale myślałem, że potrzebuję MethodInfo, podczas gdy tylko MethodBase była wymagana. Dziękuję za odpowiedź. –

0

Uważam, że jedyną rzeczą, której brakowało było poprawne BindingFlags. Nie podaję typów parametrów w tym przykładzie, ale możesz to zrobić.

var typeName = "System.Object"; // for example 
var type = Type.GetType(typeName); 
var constructorMemberInfos = type.GetMember(".ctor", BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
// Note that constructorMemberInfos will be an array of matches