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はnullです。デバッグしたところ、すべての要素に有効な値があることがわかりました。実際の問題を見つけるのを手伝ってくれませんか。

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) をコンパイルしました。この行により、null ref 例外が発生します。

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 に答える