2

我正在尝试通过反射构造以下类的实例。

public class Abc
{
    private int _a;
    public Abc(int a)
    {
        _a = a;
    }


    public void Show()
    {
        MessageBox.Show(_a.ToString());
    }

}

我正在使用以下代码段来获取类的构造函数,但是当代码到达时我得到一个“对象引用未设置为对象的实例”异常 ConstructorInfo csInfo = typa.GetConstructor(types);我检查了 msdn,发现当任何的元素为Type[] types空。我调试后发现所有元素都有有效值。你能帮我找到实际的问题吗?

Assembly ass = Assembly.GetExecutingAssembly();
Type typa = ass.GetType("Abc");
Type[] types = new Type[1];
types[0] = typeof(int);

ConstructorInfo csInfo =typa.GetConstructor(types);
object [] obj = { 10 };

var AbcObj = csInfo.Invoke(obj) as Abc;

AbcObj.Show();

谢谢

4

2 回答 2

4

我已经编译了你的代码(VS2010),这一行导致空引用异常:

Type typa = ass.GetType("Abc");

类型为空。那是因为您需要带有命名空间的类名。例如:

Type typa = ass.GetType("ConsoleApplication1.Abc");

编辑:当然,只有当您的类在命名空间中时,您才需要命名空间。

于 2012-08-05T19:38:00.263 回答
1

您需要将命名空间与类型名称一起传递

例子

Type typa = ass.GetType("YourNamesPace.Abc");
于 2012-08-05T19:39:21.347 回答