方法中的内/嵌套范围

时间:2011-12-10 09:09:04

标签: .net visual-studio c#-4.0 scope

我是一名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中是合法的。

我想知道它为什么会在这里?这仅仅是为变量提供小范围还是有其他用途?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

编辑:我认为你真正的问题是:“我有没有时间'想要'这样做?”

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

答案 1 :(得分:1)

它(通常至少)在C#中没有必要这样做,但是(正如Brandon Moore所说),为什么不呢?

一个原因可能是某些变量只有有限的时间才有效,并且通过将该变量放在范围内,您可以确保没有人可以在以后偶然使用它们。

此外,C#基于C,其中此构造非常有用。在C中,变量只能在作用域的开头声明,所以如果在一个地方只需要一个临时变量(例如循环索引),就可以用long方法完成你所编写的内容。

答案 2 :(得分:0)

因此,这种东西对于习惯于非常小的,单一职责的函数的面向对象程序员来说似乎毫无用处,这些函数为所有局部变量提供了足够有限的作用域。

但是,对于过程式编程,能够将某些变量的范围限制在一个很长的函数的一部分中非常有用,因为它可以帮助您避免在同一范围内存在过多的局部变量而可能导致错误如果您不小心使用了错误的名称或遇到命名冲突等。