2011-12-10 109 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#中,但随后(如布兰登·摩尔说),为什么不呢?

的一个原因可能是某些变量只能在有限的时间,他们是有效的,并把该变量的作用域里面,你确保没有人可以意外地中使用它们。

此外,C#是基于C,其中该构建体是非常有用的。在C语言中,变量只能在范围的开头声明,所以如果你只需要一个地方的临时变量(例如循环索引),那么类似于你写的东西就可以用长方法完成。

1

这个问题应该是为什么“不会”在那里?换句话说,除非你想拥有一个内部范围,否则你会用这个花括号来达到什么目的?如果所有其他使用大括号的构造(即任何类型的循环或使用语句)都有一个内部作用域,那么为什么不使用大括号就会产生相同的效果?

编辑:我认为你真正的问题,虽然是:“曾经有一段时间,我会‘想’这样做呢?”

至于我个人的经验而来的答案是否定的。但是,这并不意味着他们应该竭尽全力禁止已经存在的功能(由于其现有的各种结构的使用),因为我永远不会使用它。