2009-09-04 7 views
13

Конструктор выглядит следующим образом:Как получить конструктор в MethodInfo с помощью отражения

public NameAndValue(string name, string value) 

мне нужно, чтобы получить его в качестве MethodInfo с помощью отражения. Он пробовал следующее, но конструктор не нашел (GetMethod возвращает null).

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

Что я делаю неправильно?

ответ

9

Type.GetConstructor. Обратите внимание, что это возвращает ConstructorInfo, а не MethodInfo, но они оба выводятся из MethodBase, поэтому имеют в основном одни и те же члены.

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

Вы должны иметь элементы, необходимые в ConstructorInfo, я не знаю способа получить MethodInfo для конструктора, хотя.

Kindness,

Dan

+0

Я уже знал, как получить ConstructorInfo, но я думал, что мне нужен MethodInfo, тогда как требуется только MethodBase. Спасибо за ваш ответ. – 2009-09-04 15:09:24

0

Я считаю, что единственное, что вы пропали без вести были правильные BindingFlags. Я не указываю типы параметров в этом примере, но вы можете это сделать.

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