どこで見ることができま情報の取得、および住所の方法のための多次元システム。配列インスタンスです。います。
-
23-09-2019 - |
質問
システム。配列 の基底クラスのすべての配列の共通言語ランタイム(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)
が、前述の Get
や Set
方法により明確に見られます。そうではarityのこれらの方法に関する次元の配列であると思われるかをランタイムは事前に宣言しています。なかったの探しの情報はこれらの方法にMSDNとその簡単な名前として耐Googling.書いコンパイラのための言語に対応した多次元配列さんになっていただきたい全てのメディア公式アンダーグラウンドこれらの方法の条件が期待できまして存在し、何が期待できま能です。
特に、もっと知りたいかどうかを得ることが可能で、 MethodInfo
オブジェクト Get
または Set
での使用 Reflection.Emit
かずを インスタンス 配列の正しいタイプと次元性を反映するようなわかりやすいリンク先の例です。
解決
具体的には、ここを見てページのセクション14.2 63-65
しかし、お持ち帰り、そしてあなたが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#.で非常に深い多くの課題だと過ごす多くの時間を逆アセンブラの仕組みを理解し、物件の多くベース。純種類を含む配列.あります。