int a = 0;
int[] b = new int[3];
Console.WriteLine( a.GetType() );
Console.WriteLine( b.GetType() );
aの型は構造System.Int32
体です。bの型は ですint[]
。
Int32
Visual Studio での定義を見ることができます。場所の定義はint[]
?
特定の typeT
の場合、その型T[]
は構成によって事前定義されています。T[][]
などもそうです。
Array クラスは、配列をサポートする言語実装の基本クラスです。ただし、Array クラスから明示的に派生できるのは、システムとコンパイラだけです。ユーザーは、言語によって提供される配列構造を使用する必要があります。
より詳細な:
.NET Framework 2.0 以降、Array クラスは System.Collections.Generic.IList、System.Collections.Generic.ICollection、および System.Collections.Generic.IEnumerable ジェネリック インターフェイスを実装します。実装は実行時に配列に提供されるため、ドキュメント ビルド ツールには表示されません。その結果、ジェネリック インターフェイスは Array クラスの宣言構文に表示されず、配列をジェネリック インターフェイス型にキャストすることによってのみアクセスできるインターフェイス メンバー (明示的なインターフェイスの実装) に関するリファレンス トピックはありません。これらのインターフェイスのいずれかに配列をキャストするときに注意すべき重要な点は、要素を追加、挿入、または削除するメンバーが NotSupportedException をスローすることです。
C#:
static void Main(string[] args)
{
int a = 0;
int[] b = new int[3];
}
イル:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// 11 (0xb)
.maxstack 1
.locals init ([0] int32 a,
[1] int32[] b)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldc.i4.3
IL_0004: **newarr** [mscorlib]System.Int32
IL_0009: stloc.1
IL_000a: ret
}
「newarr」が表示されます ここでは、newarr に関する詳細を示し ます http://www.dotnetperls.com/newarr
newarr 命令はあまり興味深いものではありません。しかし、.NET Framework の重要な設計上の決定が明らかになります。ベクトル (1D 配列) は 2D 配列とは別のものです。そして、この知識は、プログラムで選択するタイプに影響を与える可能性があります。