2

私は現在、リフレクションを学習しようとしていますが、GetConstructorが使用されている例をいくつか見てきました。これは、リフレクションを使用して作業を開始できるようにするために理解する必要のある基本関数の1つだと思います。コードの機能と使用方法を理解していると思います。

msdnのコード例

http://msdn.microsoft.com/en-us/library/h93ya84h.aspx

types[0] = typeof(int);
// Get the constructor that takes an integer as a parameter.
ConstructorInfo constructorInfoObj = myType.GetConstructor(types);

私がコードで抱えている唯一の問題は、GetConstructorメソッドを使用できるようにするためにダミーの型配列を作成する必要がある理由を理解できないことです(「メソッドはそのように構築されている」を除く)。私の考えでは、論理インパラメーターは、リフレクションによって取得しようとしているコンストラクターのインデックスを含む整数になります。理由が存在する場合、誰かが型配列がパラメーター内で使用される理由を説明できますか?

4

4 に答える 4

4

コンストラクターは、シグネチャー、つまりパラメーターの型の順序付きリストによって検索されます。そのため、コンストラクタ パラメータ タイプの配列を渡す必要があります。私の意見では、これは非常に論理的です。

于 2013-03-18T17:01:02.840 に答える
2

特定の署名でType[]検索する必要があります。constructor

array represent the order of Parameter受け入れられるタイプConstructor

MSDNで与えられた例に従って

public class MyClass1
  {
      public MyClass1(){}
      public MyClass1(int i){}
  }

あなたが何かを通過した場合

Type[] types = new Type[1];
types[0] = typeof (long);

ConstructorInfo constructorInfo = typeof (MyClass1).GetConstructor(types);

constructorInfo引数として取るものは存在しnullないため、constructorlong

于 2013-03-18T17:01:59.570 に答える
1

[..] GetConstructor メソッドを使用できるようにするために、ダミーの型配列を作成する必要がある理由がわかりません (「メソッドがそのように構築されている」ことを除く)。

多くの場合、リフレクションは「int、string、double の順に取るコンストラクターを持つことが知られている型からオブジェクトを作成する」などの問題を解決します。これを念頭に置いて、パラメーター型の配列が入力として提供されることは理にかなっています。複数のコンストラクターを持つ可能性のある型から単一のコンストラクターを探しているので、他にどのようにあいまいさを解消できますか?

私の考えでは、論理入力パラメーターは、リフレクションによって取得しようとしているコンストラクターのインデックスを含む整数になります。

この指数は何を表していると思いますか? メンバーは、ソース プログラミング言語で宣言されたのと同じ順序で、リフレクション API によって並べられることが保証されていません。いずれにせよ、列挙/インデックス付けできるコンストラクターの配列が必要なようです。Type.GetConstructorsこれに役立ちます。

于 2013-03-18T17:04:28.947 に答える
1

コンストラクターは 0 個以上のパラメーターを持つことができるためです。タイプのリストは、どのコンストラクターを取得するかをリフレクションに伝えます。

于 2013-03-18T17:01:33.023 に答える