15

以下が機能するのはなぜですか?

class A
{
    public int[,] i = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };

    static void Main(string[] args)
    {
    }
}

次はそうではありませんか?

class A
{
    public const int[,] i = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };

    static void Main(string[] args)
    {
    }
}

文字列以外の const 参照型に null 以外を割り当てることはできません。これは配列 (参照) であるため、null (?) を割り当てる必要があります。定数でnullの場合、どのように初期化されますか?

4

3 に答える 3

3

constそれはキーワードの制限であるため、機能しません。

MSDNから:

const キーワードは、フィールドまたはローカル変数の宣言を変更するために使用されます。フィールドまたはローカル変数の値が定数であることを指定します。これは、変更できないことを意味します。

定数式は、コンパイル時に完全に評価できる式です。したがって、参照型の定数に使用できる値はstringと nullのみです。

変更できない配列を定義しようとしている場合は、readonlyキーワードを使用する必要があります。これにより、フィールドまたはローカル変数に加えられる変更が宣言またはコンストラクターに制限されます。

于 2013-04-12T00:28:39.293 に答える
2

定数はコンパイル時に評価されます。配列は参照型であり、参照型を作成する唯一の方法はnewキーワードを使用することです (これはコード内で暗黙的です)。

newコンパイル時に評価できないため、定数式では使用できません。

MSDN を参照してください: http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(CS0134);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5)&rd=true

于 2013-04-12T00:28:55.860 に答える