私はC#を学び、 "型指向"の側面を理解しようとしています。int []文字列または他の型のオブジェクトにsystem.arrayオブジェクトをキャスト
先日、メソッドからSystem.Arrayオブジェクトを受け取る必要がありました。 それから、私はそれを個々のオブジェクトで処理しようとしました。だから私はインデックスでそれを扱おうとしました。 コンパイラは、System.Arrayオブジェクトがインデックス作成をサポートしていないと言ってくれません。
しかし、そうではありません。配列はすべての配列の基本クラスです(System.Array on msdn)? int []はインデックス作成をどのようにサポートしていますか、Array []はサポートしていませんか?ここ
は、問題を示すためにいくつかのコードです:
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
int t;
Array sysArray;
Console.WriteLine("{0}", intArray.GetType().ToString()); // output: System.Int32[]
sysArray = Array.CreateInstance(typeof(int), 10);
Console.WriteLine("{0}", sysArray.GetType().ToString()); // output: System.Int32[]
sysArray = intArray; //compiles ok
//t = sysArray[4]; This line produces error Error 2 Cannot apply indexing with [] to an
// expression of type 'System.Array'
//t = intArray[4]; This line compiles ok
それでは、私たちがここに持っていることは同じタイプであるように見える2つのオブジェクト、です。 しかし、1つはインデックス作成を実装しており、もう1つはそうではありません、どうすれば可能ですか?
回答
への参照あなたのコメントを読んだ後、私は物事の感覚を得たと思います。 int []はオブジェクトの配列です。各オブジェクトはint32型の構造体です。 Array []はオブジェクトの配列です。各オブジェクトはArray型のクラスです。 意味:配列の配列。 私は次のコードで表示することができますよう:
Array[] sysArrayOfArray = new Array[SIZE_OF_THE_MOTHER_ARRAY];
sysArrayOfArray[0] = Array.CreateInstance(typeof(int),SIZE_OF_FIRST_CHILD_ARRAY);
sysArrayOfArray[1] = Array.CreateInstance(typeof(int),SIZE_OF_FIRST_SECOND_ARRAY);
というように、私はsysArrayの要素にアクセスしようとした方法が間違っていた理由は... はので、私は理解しました。 intArray - 多くのintの> 1つのアレイ sysArray - ビューsysArrayの言語の点から
(多くのint型へのアクセスを許可)> 1クラスは、(それが1つのオブジェクトへの参照のみで、まったく配列ではありません)タイプのSystem.Arrayの
)(ビットを繰り返すため申し訳ありませんが、それは本当に私の頭の中でセットの事を助け
その違いを理解する上で案内するためにあなたのすべてに感謝します。 Array
がそうのように宣言されている一方で
Array sysArray = Array.CreateInstance(typeof(int),3);
int[] intArray = new int[3];
int one, ten, hundred;
sysArray.SetValue(1, 0);
sysArray.SetValue(10,1);
sysArray.SetValue(100,2);
intArray = (int[])sysArray;// works, but forces me to create a new reference
one = ((int[])sysArray)[0];// works and is exactly what i was looking for...
ten = ((int[])sysArray)[1];
hundred = ((int[])sysArray)[2];
あなたの質問は明らかではありません。 intはオブジェクトです....だからあなたがしていることはほとんど意味がありません。 –