关于 C# 变量作用域与其他语言的问题

2023-11-23

首先声明一下,我以前没用过C#,对它了解不多。

我正在学习 Sebesta 的《编程语言概念第 9 版》一书,准备“编程语言”考试。当我读到以下摘录自“范围声明顺序(第246页)”时,我有点困惑:

“...例如,在 C99、C++、Java 中,所有局部变量的范围是从它们的声明到这些声明出现的块的末尾。但是,在 C# 中,块中声明的任何变量的作用域都是整个块,无论声明在块中的位置如何,只要它不在嵌套块中即可。对于方法来说也是如此。请注意,C# 仍然要求所有变量在使用之前进行声明。因此,虽然变量的作用域从声明延伸到该声明出现的块或子程序的顶部,但该变量仍然不能在其声明之上使用"

为什么 C# 的设计者做出这样的决定?这种不寻常的决定有什么具体的原因/优势吗?


这会阻止您执行以下操作

void Blah()
{
   for (int i = 0; i < 10; i++)
   {
      // do something
   }

   int i = 42;
}

原因是,例如,如果您必须移动代码,则可能会出现细微的错误。如果你需要i在你的循环之前,现在你的循环被打破了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 C# 变量作用域与其他语言的问题 的相关文章

随机推荐

  • sails.js(使用node.js 和express.js)的标题或应用程序名称在哪里?

    我正在尝试更改我的网站名称 找不到可以设置标题或应用程序名称的位置 您可以在以下位置创建任何文件config 目录 例如config app js其中包含这样的内容 module exports appName My App 导出对象的任何
  • 设计和编码 - 从上到下还是从下到上? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在编码时 根据您的经验 什么是更好的方法 将问题分解为足够小的部分 然后实施每个部分 将问题分解 然后使用自上而下的方法实施 任何其他 我倾向于自上而下设计并自下而上实施 对于实施而言 构
  • 尝试将消息发送到远程队列时 pika.exceptions.ProbableAuthenticationError

    我正在尝试奔跑RabbitMQ Python 教程但发送方位于 virtualbox 主机上 接收方和队列位于 virtualbox 来宾机上 所以我修改了提到的send py仅通过替换代码本地主机 with 192 168 1 5 当我运
  • 如何从菜谱目录的内容生成私有菜谱 JSON?

    我已经开发了一个 Symfony 包 并且正在尝试创建一个配方 在提交之前recipes contrib 我想测试一下 所以我跟着私人食谱说明 不是因为我想要一个私有配方 也就是说 包和配方都不是私有 GitHub 项目意义上的 私有 我已
  • ios编程-格式字符串未使用数据参数

    I get a Data argument not used by format string当我运行以下代码时出错 void pickerView UIPickerView thePickerView didSelectRow NSInt
  • MediaStore:获取图像数据、缩略图和文件夹

    我有两个清单 我们将它们称为AlbumsList 和PicturesList 第一个显示相册封面 其中一张图像 名称和其中的照片数量 第二个显示所选相册中包含的所有图像 我已经使用 File 类完成了此操作 但它运行速度太慢 并且当我只需要
  • 导航栏上方的 android Q 内容

    我们的应用程序的目标是 API 28 并在状态栏下绘制内容 为此 我们使用以下标志和样式 window addFlags FLAG LAYOUT NO LIMITS
  • jquery mobile 中的日期选择器在第二页中添加时是重复的

    我需要一些有关移动应用程序中日期选择器使用的帮助 我在我的应用程序中使用 jQuery UI 日期选择器 但是当我将日期选择器放在第二页时 它会显示两次 重复 但是 当我将日期选择器放在第一页时 显示正常 这是一个示例 如果您运行它 您可以
  • 有没有办法将命名范围组合成新的命名范围?

    I have class Foo lt ActiveRecord Base named scope a lambda a conditions gt a gt a named scope b lambda b conditions gt b
  • url 中的 django 用户名,而不是 id

    在一个迷你虚拟社区中 我有一个 profile view 功能 这样我就可以查看任何注册用户的个人资料 个人资料视图函数将个人资料所属的用户的 id 作为参数 因此当我想访问用户 2 的个人资料时 我会这样调用它 http 127 0 0
  • 如何使用 PowerShell Invoke-RestMethod 发送多部分/表单数据

    我正在尝试通过 Invoke RestMethod 在与带有 F 开关的curl 类似的上下文中发送文件 卷曲示例 curl F FileName path to file name https uri to post 在powershel
  • Elasticsearch节点重启后快速恢复

    考虑 elasticsearch yml 中的以下设置 gateway recover after data nodes 3 gateway recover after time 5m gateway expected data nodes
  • Linux 中对 pthread_create 的未定义引用

    我从网上获取了以下演示https computing llnl gov tutorials pthreads include
  • C++14 中不指定对象的左值

    我在这里使用 N3936 作为参考 如果 C 14 文本有任何不同 请更正此问题 3 10以下左值和右值我们有 每个表达式都属于该分类中的基本分类之一 左值 x值或纯右值 然而 定义lvalue reads An lvalue 指定一个函数
  • C 中的按位连接

    我正在尝试在 C 中连接两个二进制数 所以如果我有1010 and 0011我希望我的结果是10100011 我写了一个我认为可以完成这项工作的简短例程 include
  • Eclipse 优化导入以包括静态导入

    有没有办法让 Eclipse 自动查找静态导入 例如 现在我终于升级到了 Junit 4 我希望能够编写 assertEquals expectedValue actualValue hit Ctrl Shift O and have Ec
  • 重置 svg 填充 css

    我想让所有 svgs 都具有相同的纯色 所以我用 svg fill ccc 但我想在 hover 上获得默认填充 如何禁用填充并恢复默认值 您可以使用以下方法执行此操作 not 并有效地设置 不悬停 的样式 svg not hover fi
  • Jupyter:安装后没有名为“imblearn”的模块

    我在 ANACONDA Navigator 上安装了 imbalanced learn 版本 0 3 1 当我使用 Jupyter Python 3 运行不平衡学习网站上的示例时 from imblearn datasets import
  • Git版本兼容性

    使用 Git 进行版本控制 与不同版本的 Git 协同工作的效果如何 有关的体验 好还是坏 是什么 长话短说 我正在考虑将 Git 用于一些计划的家庭项目 但由于我使用存储库中的默认包进行的大杂烩设置将意味着完全不同的版本 我计划在运行 U
  • 关于 C# 变量作用域与其他语言的问题

    首先声明一下 我以前没用过C 对它了解不多 我正在学习 Sebesta 的 编程语言概念第 9 版 一书 准备 编程语言 考试 当我读到以下摘录自 范围声明顺序 第246页 时 我有点困惑 例如 在 C99 C Java 中 所有局部变量的