1

以下のコードを参照してください。

public static int Main()
{
    int j = 20;
    for (int i=0; i < 10; i++)
    {
        int j = 30;    //can't do this
        Console.WriteLine(j + i);
    }
    return 0;
}

ここでは変数の非表示を行わず、エラーが発生するため、C#でエラーが発生します:

'j'という名前のローカル変数は、'親または現在の'スコープですでに使用されている'j'とは異なる意味を与えるため、このスコープで宣言することはできません。

上記のプログラムをc++で実行すると機能し、c++ではこの状況での変数の非表示をサポートします。

今私の質問は、これの背後にある理由は何ですか?
C#開発者がここに隠れることをサポートしないことにした理由。
なぜC++はここに隠れることを許可するのですか?

4

3 に答える 3

3

C ++は、Cとの互換性のためにこのようなものを保持していました。これは、Cで許可されていたため、C++でも許可されています。

C#には互換性がなく、互換性も必要ありません。したがって、この「隠れ」は取り除かれました。

于 2012-11-15T13:49:52.843 に答える
2

そのようなことの答えは常に同じです。誰もその機能を評価、指定、設計、実装、テスト、文書化、伝達、翻訳、サポートしていないからです。この場合、具体的なメリットがなく(別の変数名を使用するだけで、あいまいさの問題をすべて回避できます)、従来の理由でこの機能を使用する必要がなかったという理由だけで想像できます。

于 2012-11-15T13:50:32.037 に答える
0

その理由は、同じ関数に 2 つの変数を使用することは混乱を招く可能性があり、不必要であると考えられているためです。

于 2012-11-15T13:54:26.973 に答える