方法中的内/嵌套范围

问题描述 投票:1回答:3

我是一名C#开发人员,他长期从事该语言的工作。

我想知道为什么语言允许函数的嵌套/内部范围。

这是我的意思的一个例子:

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

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

任何帮助将不胜感激。

.net visual-studio c#-4.0 scope
3个回答
1
投票

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

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

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


1
投票

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

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

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


0
投票

因此,对于面向对象的程序员而言,这种事情似乎毫无用处,他们习惯于非常小的单一责任函数,这些函数为所有局部变量提供了有限的范围。

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

© www.soinside.com 2019 - 2024. All rights reserved.