6
int a = 0;
int[] b = new int[3];

Console.WriteLine( a.GetType() );
Console.WriteLine( b.GetType() );

aの型は構造System.Int32体です。bの型は ですint[]

Int32Visual Studio での定義を見ることができます。場所の定義はint[]?

4

3 に答える 3

8

特定の typeTの場合、その型T[]は構成によって事前定義されています。T[][]などもそうです。

于 2013-03-20T00:28:36.690 に答える
4

System.Array

Array クラスは、配列をサポートする言語実装の基本クラスです。ただし、Array クラスから明示的に派生できるのは、システムとコンパイラだけです。ユーザーは、言語によって提供される配列構造を使用する必要があります。


より詳細な:

.NET Framework 2.0 以降、Array クラスは System.Collections.Generic.IList、System.Collections.Generic.ICollection、および System.Collections.Generic.IEnumerable ジェネリック インターフェイスを実装します。実装は実行時に配列に提供されるため、ドキュメント ビルド ツールには表示されません。その結果、ジェネリック インターフェイスは Array クラスの宣言構文に表示されず、配列をジェネリック インターフェイス型にキャストすることによってのみアクセスできるインターフェイス メンバー (明示的なインターフェイスの実装) に関するリファレンス トピックはありません。これらのインターフェイスのいずれかに配列をキャストするときに注意すべき重要な点は、要素を追加、挿入、または削除するメンバーが NotSupportedException をスローすることです。

于 2013-03-20T00:46:28.440 に答える
2

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 配列とは別のものです。そして、この知識は、プログラムで選択するタイプに影響を与える可能性があります。

于 2013-03-20T00:37:24.830 に答える