【问题标题】:Inner/Nested Scope in Methods方法中的内部/嵌套范围
【发布时间】:2023-04-05 02:02:01
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 我猜它不仅在 C# 4 中是合法的,而且在以前的版本中也可用,甚至在 C 等大多数语言中都可用。顺便说一句,你有什么收获。你能简单介绍一下吗?
  • 我只是想知道这种范围的目的是什么
  • 请注意,许多人也会将此称为“嵌套”范围。至于你的问题,这有点像问,“为什么我的工具箱里有扳手?”答案是当我需要使用它时它很有用。

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


【解决方案1】:

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

一个原因可能是某些变量的有效时间有限,通过将该变量放在一个范围内,您可以确保以后不会有人意外使用它们。

此外,C# 基于 C,这种结构非常有用。在 C 中,变量只能在作用域的开头声明,因此如果您只需要在一个地方(例如循环索引)有一个临时变量,则可以在长方法中完成类似您编写的操作。

【讨论】:

  • 说“在 C 中,变量只能在作用域的开头声明”并不正确,这对于某些/旧版本可能是正确的,但对于每个 c 版本/编译器都不是正确的example
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    因此,对于习惯于为所有局部变量提供足够有限范围的非常小的、单一职责的函数的面向对象程序员来说,这种事情可能看起来毫无用处。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      相关资源
      最近更新 更多