どこで見ることができま情報の取得、および住所の方法のための多次元システム。配列インスタンスです。います。

StackOverflow https://stackoverflow.com/questions/2555769

質問

システム。配列 の基底クラスのすべての配列の共通言語ランタイム(CLR).による この記事:

各コンクリート配列型で、[前]ランタイムの追加の特別の方法: Get/Set/Address.

うすれば分解はこのC#コードでは、

int[,] x = new int[1024,1024];
x[0,0] = 1;
x[1,1] = 2;
x[2,2] = 3;
Console.WriteLine(x[0,0]);
Console.WriteLine(x[1,1]);
Console.WriteLine(x[2,2]);

入CILい,

IL_0000:  ldc.i4     0x400
IL_0005:  ldc.i4     0x400
IL_000a:  newobj     instance void int32[0...,0...]::.ctor(int32,
                                                         int32)
IL_000f:  stloc.0
IL_0010:  ldloc.0
IL_0011:  ldc.i4.0
IL_0012:  ldc.i4.0
IL_0013:  ldc.i4.1
IL_0014:  call       instance void int32[0...,0...]::Set(int32,
                                                       int32,
                                                       int32)
IL_0019:  ldloc.0
IL_001a:  ldc.i4.1
IL_001b:  ldc.i4.1
IL_001c:  ldc.i4.2
IL_001d:  call       instance void int32[0...,0...]::Set(int32,
                                                       int32,
                                                       int32)
IL_0022:  ldloc.0
IL_0023:  ldc.i4.2
IL_0024:  ldc.i4.2
IL_0025:  ldc.i4.3
IL_0026:  call       instance void int32[0...,0...]::Set(int32,
                                                       int32,
                                                       int32)
IL_002b:  ldloc.0
IL_002c:  ldc.i4.0
IL_002d:  ldc.i4.0
IL_002e:  call       instance int32 int32[0...,0...]::Get(int32,
                                                        int32)
IL_0033:  call       void [mscorlib]System.Console::WriteLine(int32)
IL_0038:  ldloc.0
IL_0039:  ldc.i4.1
IL_003a:  ldc.i4.1
IL_003b:  call       instance int32 int32[0...,0...]::Get(int32,
                                                        int32)
IL_0040:  call       void [mscorlib]System.Console::WriteLine(int32)
IL_0045:  ldloc.0
IL_0046:  ldc.i4.2
IL_0047:  ldc.i4.2
IL_0048:  call       instance int32 int32[0...,0...]::Get(int32,
                                                        int32)
IL_004d:  call       void [mscorlib]System.Console::WriteLine(int32)

が、前述の GetSet 方法により明確に見られます。そうではarityのこれらの方法に関する次元の配列であると思われるかをランタイムは事前に宣言しています。なかったの探しの情報はこれらの方法にMSDNとその簡単な名前として耐Googling.書いコンパイラのための言語に対応した多次元配列さんになっていただきたい全てのメディア公式アンダーグラウンドこれらの方法の条件が期待できまして存在し、何が期待できま能です。

特に、もっと知りたいかどうかを得ることが可能で、 MethodInfo オブジェクト Get または Set での使用 Reflection.Emit かずを インスタンス 配列の正しいタイプと次元性を反映するようなわかりやすいリンク先の例です。

役に立ちましたか?

解決

具体的には、ここを見てページのセクション14.2 63-65

http://download.microsoft.com/download/7/3/3/733AD403-90B2-4064-A81E-01035A7FE13C/MS%20Partition%20II.pdfする

しかし、お持ち帰り、そしてあなたがILから伝えることができますが、彼らは指定されたインデックス位置に配列を扱うためのgetterメソッドとsetterメソッドだということです。

  のシーケンスを取り、

•A取得方法   INT32引数、それぞれに1つ   アレイの寸法、及び戻りA   その型の要素型である値   配列の。この方法は、に使用されています   配列の特定の要素にアクセスします   どこ引数がインデックスを指定   各次元に、で始まります   される要素の、最初の   返されます。

     

シーケンスを取り•A Setメソッド   INT32引数、それぞれに1つの   アレイの寸法、A続きます   その型の要素型である値   配列の。セットの戻り値の型   無効です。この方法は、Aセットに使用されています   ここで、アレイの特定の要素   引数はへのインデックスを指定します   各次元で始まります   まず、要素の集合へと   最後の引数は、値を指定します   ターゲット要素に格納する。

     

•かかる送付方法   INT32引数の順序、1のために   アレイの各次元、及びAを有します   管理ポインタである戻り値の型   配列の要素型に。この   この方法は、管理返すために使用されます   の特定の要素へのポインタ   引数が指定する配列   各次元へのインデックス、始まります   その要素の、第一と   アドレスが返されるます。

編集ののページ63-65は、文書のページ番号を使用して、その。実際のPDFで73-75ます。

他のヒント

は2番目の質問に答えるために、あなたはこれらのメソッドのMethodInfoを取得するためのインスタンスを作成する必要はありません。

のようなもの
var mi = typeof(string).MakeArrayType(6).GetMethod("Get");

Getタイプのためstring[,,,,,]方法を取得していきます。

いのでアドレスのものの特定の問題が大文字の(その他) CLR C#.で非常に深い多くの課題だと過ごす多くの時間を逆アセンブラの仕組みを理解し、物件の多くベース。純種類を含む配列.あります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top