2011-12-10 14 views
1

私は長い間言語を使用しているC#開発者です。メソッドの内部/ネストされたスコープ

なぜlangaugeが関数のネスト/インナースコープを許可しているのだろうと思います。ここで

私が何を意味するかの例です:私は理由を知りたいあなたはメソッド本体が匿名または無名のスコープを持って見ることができるように

 public int InnerScopeMethod() 
    { 
     int i = 10; 

     //Inner Scope 
     {    
      int j = 100;//j will not work outside of the scope. 
      i *= j; 
     }//Scope Ends Here 

    //j = 10 /// This Will Cause Error. 
     return i; 
    } 

、それはC#で4

合法でありますそれはここですか?これは、変数の小さなスコープを提供するためだけのものか、他の用途を持っていますか?

ご協力いただきますようお願い申し上げます。

+0

C#4では合法ではなく、以前のバージョンでも利用可能であり、Cのような言語でも利用可能であると思います。これについてもっと簡単に言えますか? –

+0

私はちょうどこの種のスコープの目的が何であるか知りたいだけです。 –

+1

多くの人がこれを "ネスト"スコープと呼ぶことに注意してください。あなたの質問に関しては、ちょっと私はツールボックスにレンチを持っているのですか?その答えが必要なときに役立つという答えがあります。 – dash

答えて

0

C#でこれを行う必要はありませんが(Brandon Moore氏)、なぜそうではありませんか?

特定の変数は有効な時間が限られている可能性があり、その変数をスコープ内に入れることで、誰も後で誤って使用することがないようにすることができます。

さらに、C#はCに基づいています。この構造は非常に便利です。 Cでは、変数はスコープの先頭でのみ宣言することができるので、一時変数を1つの場所(たとえばループインデックス)にするだけで、長いメソッドで書くことができます。

1

質問はそこにあるのではないでしょうか?言い換えれば、中括弧を使用するために、内側の範囲が必要な場合を除いて、どのような目的がありますか?中括弧を使用する他のすべての構造体(つまり、あらゆる種類のループや文を使用する)の内部スコープが存在する場合、なぜ中括弧を使用しないと同じ効果が得られるのでしょうか?

編集:あなたの本当の疑問は、「私はこれをやりたいと思う時がありますか?

私の個人的な経験が行く限り、答えはノーとなります。しかし、それは、私が決して使っていないからといって、すでに存在しているこの機能性を禁止するために、彼らが道を離れるべきではないということではありません。

関連する問題