获取包含详细信息的程序集的构造函数

时间:2015-07-10 10:13:47

标签: c# reflection constructor

根据模拟.Net程序集,我试图获取具有参数名称和参数数据类型的程序集的构造函数。 我使用这段代码:

SampleAssembly = Assembly.LoadFrom("");

ConstructorInfo[] constructor = SampleAssembly.GetTypes()[0].GetConstructors();

foreach (ConstructorInfo items in constructor)
{
    ParameterInfo[] Params = items.GetParameters();
    foreach (ParameterInfo itema in Params)
    {
        System.Windows.Forms.MessageBox.Show(itema.ParameterType + " " + itema.Name);
    }
}

但似乎itema中没有任何内容但我在方法上实现了相同的方案并且有效! (我确定我的程序集包含两个以上具有不同参数的构造函数。)

那么有任何关于使用参数检索程序集的构造函数的建议吗?!

编辑:我在主代码上使用了正确的路径。在:Assembly.LoadFrom("");

提前致谢。

2 个答案:

答案 0 :(得分:2)

我认为您的问题是您只在索引[0]处仅使用Type的构造函数。

检查一下是否有效:

List<ConstructorInfo> constructors = new List<ConstructorInfo>();
Type[] types = SampleAssembly.GetTypes();
foreach (Type type in types)
{
    constructors.AddRange(type.GetConstructors());
}

foreach (ConstructorInfo items in constructors)
{
    ParameterInfo[] Params = items.GetParameters();
    foreach (ParameterInfo itema in Params)
    {
        System.Windows.Forms.MessageBox.Show(itema.ParameterType + " " + itema.Name);
    }
}

答案 1 :(得分:1)

它对我有用。但是,您忘记指定装配路径:

SampleAssembly = Assembly.LoadFrom("");

应该是这样的:

SampleAssembly = Assembly.LoadFrom("C:\\Stuff\\YourAssembly.dll");

编辑: 要回复您的评论,请设置断点并查看GetTypes()[0]的含义。即使您只显式创建了1个类,也可能存在匿名类。您不应该假设您要反映的类确实是程序集中的唯一类。

如果您编写如下代码:

class Program
{
  static void Main()
  {
        Type t = typeof(Program);
        ConstructorInfo[] constructor = t.GetConstructors();

        foreach (ConstructorInfo items in constructor)
        {
            ParameterInfo[] Params = items.GetParameters();

            foreach (ParameterInfo itema in Params)
              System.Windows.Forms.MessageBox.Show(itema.ParameterType + " " + itema.Name);
        }   
  }

  public Program() {}
  public Program(String s) {}
}

您将看到提取参数类型和名称的代码应该并且将起作用,因此问题在于定位类。尝试通过其完全限定名称查找该类。