3

いいえ、これは私の宿題ではありません。
(私の横に解答用紙の山があり、採点を待っているからです。)

Q: メソッド内のローカル変数がメイン プログラム内の変数と同じ名前の場合、どうなりますか?
a) エラーが生成される
b) メソッドの実行が終了するまで、メイン プログラムの変数が「非表示」になる
c) メイン プログラムの変数がメソッドの変数をオーバーライドする
d) 上記のいずれでもない。

教科書の答えは b で、非常に単純です。

しかし、よく考えてみると、それは本当に「隠されている」のでしょうか。
私の知る限り、C# や Java などの純粋なオブジェクト指向言語では、
いつでも使用できます。

this.x

また

MainProgram.x

静的変数用。

私の質問は次のとおりです。
オプション b は C# で true と見なすことができますか? なんで?

あなたの考えを共有してください。

4

2 に答える 2

4

はい、ローカル変数は、そのメソッド/ブロックのスコープ内のメンバー変数を非表示にしxます (より正確には、シャドウ- @pst のおかげです) 。作業を楽にするために、修飾名x後者を参照できますが、それでも答えは正しいです。(完全に) 修飾された名前はスコープに依存しなくなったため、非表示にしたりシャドウしたりすることはできません。this.x

于 2012-04-21T08:33:35.403 に答える
2

C# 4 仕様のセクション 3.7.1 を参照してください。便宜上、その冒頭部分をここに引用します。

通常、エンティティのスコープには、エンティティの宣言スペースよりも多くのプログラム テキストが含まれます。特に、エンティティのスコープには、同じ名前のエンティティを含む新しい宣言スペースを導入する宣言が含まれる場合があります。このような宣言により、元のエンティティが非表示になります。逆に、エンティティが非表示でない場合、エンティティは表示されていると言われます。

仕様のこの部分を正しく理解するには、エンティティのスコープとその宣言スペースの違いを理解する必要があります。スコープは、エンティティが非修飾名で参照されるプログラム テキストの領域です。宣言スペースは、エンティティの名前が一意であるプログラム テキストの領域です。

詳細については、セクション 3.7.1 の残りをお読みください。

「隠されている」もよく使われますが、指定された用語は「隠されている」ことにも注意してください。

于 2012-04-21T15:01:28.587 に答える