当前位置: 首页 > news >正文

C# 图解教程 第5版 —— 第10章 语句

文章目录

    • 10.1 什么是语句(*)
    • 10.2 表达式语句
    • 10.3 控制流语句
    • 10.4 if 语句(*)
    • 10.5 if ... else 语句(*)
    • 10.6 while 循环(*)
    • 10.7 do 循环(*)
    • 10.8 for 循环
      • 10.8.1 for 语句中变量的作用域
      • 10.2 初始化和迭代表达式中的多表达式(*)
    • 10.9 switch 语句
      • 10.9.1 分支示例(*)
      • 10.9.2 其他类型的模式表达式(*)
      • 10.9.3 switch 语句的补充
    • 10.10 跳转语句(*)
    • 10.11 break 语句(*)
    • 10.12 continue 语句(*)
    • 10.13 标签语句
      • 10.13.1 标签
      • 10.13.2 标签语句的作用域
    • 10.14 goto 语句
    • 10.15 using 语句
      • 10.15.1 包装资源的使用
      • 10.15.2 using 语句的示例(*)
      • 10.15.3 多个资源和嵌套
      • 10.15.4 using 语句的另一种形式
    • 10.16 其他语句

10.1 什么是语句(*)

10.2 表达式语句

​ 表达式返回值有副作用,对许多表达式求值只是为了它们的副作用。

x = 10;
  • 该表达式将 10 赋给 x,虽然这可能是语句的主要动机,但却归类为副作用。
  • 设置 x 值后,表达式返回 x 的新值 10,但这个结果被忽略了。

10.3 控制流语句

  • 条件执行语句
    • if
    • if … else
    • switch
  • 循环语句
    • while
    • do
    • for
    • foreach
  • 跳转语句
    • break
    • continue
    • return
    • goto
    • throw

10.4 if 语句(*)

10.5 if … else 语句(*)

10.6 while 循环(*)

10.7 do 循环(*)

10.8 for 循环

​ 如果 TestExpr 为空,则测试一直返回 true。

image-20231028141924788
图10.1 for 循环语句

10.8.1 for 语句中变量的作用域

​ 任何声明在 initializer 中的变量只在该 for 语句的内部可见。

image-20231028142238282
图10.2 for 语句中变量的作用域

10.2 初始化和迭代表达式中的多表达式(*)

10.9 switch 语句

image-20231028142717609 image-20231028142753409
图10.3 switch 语句的结构
  • C# 7.0 允许 TestExpr 为任何类型。
  • switch 语句使用深度比较。
    • 如果 TestExpr 和 PatternExpression 均为整数类型,C# 使用 == 比较。
    • 否则,使用静态方法 Object.Equals(TestExpr, PatternExpression) 比较。
  • 每个分支块遵守“不穿过规则”。
    • 分支块中的语句不能达到终点并进入下一个分支块。
    • goto 不能和 switch 一起使用。
  • default 分支可选,如果包括则必须以一条跳转语句结束。
image-20231028143214511
图10.4 穿过 switch 语句的控制流

10.9.1 分支示例(*)

10.9.2 其他类型的模式表达式(*)

10.9.3 switch 语句的补充

​ 可以将多个分支标签附加到任意分支:

image-20231028143711563
图10.5 使用多个分支示例

10.10 跳转语句(*)

10.11 break 语句(*)

10.12 continue 语句(*)

10.13 标签语句

image-20231028143954306
图10.6 标签语句

​ 标签语句仅执行 Statement 部分,就如同标签不存在一样。

10.13.1 标签

  • 标签有自己的声明空间,可与变量重名。
  • 标签名不能是关键字。
  • 重叠范围内标签名不能重复。

10.13.2 标签语句的作用域

​ 标签语句的作用域为:

  • 其声明所在的块。
  • 声明块内部嵌套的块。

​ 图 10.7 阴影部分展示了 increment 标签语句的作用域。

image-20231028144250525
图10.7 标签的作用域包括嵌套的块

10.14 goto 语句

  • goto 可以跳入其所在块内的任何标签语句。
  • goto 可以跳出到任何嵌套它的块内。
  • goto 不能跳入所在块的内部快(避免部分条件判断缺失造成程序紊乱)。

​ 使用 goto 语句是非常不好的!

10.15 using 语句

​ 资源:指实现了 System.IDisposable 接口的类或结构。该接口仅有一个 Dispose 的方法。

​ 图 10.8 展示了使用资源的阶段。如果使用资源时发生运行时错误,那么处置资源的代码可能无法执行。

  1. 分配资源。
  2. 使用资源。
  3. 处置资源。
image-20231028145327875
图10.8 使用资源的阶段

10.15.1 包装资源的使用

​ using 语句的第一种形式如图 10.9 所示。

  • 圆括号内分配资源。
  • Statement 使用资源。
  • using 语句隐式产生处置资源的代码。
image-20231028145723589
图10.9 using 语句的第一种形式

​ 使用 using 语句的效果如下:

  1. 分配资源。
  2. 将 Statement 放入 try 块。
  3. 创建资源的 Dispose 方法,并放入 finally 块。
image-20231028145905296
图10.10 using 语句的效果

10.15.2 using 语句的示例(*)

10.15.3 多个资源和嵌套

​ 使用相同类型的多个资源语法如下:

image-20231028150027685
图10.11 使用多个资源的 using 语句

10.15.4 using 语句的另一种形式

image-20231028150135076 image-20231028150210187
图10.12 using 语句的第二种形式
  • 这种形式也能确保使用完资源后调用 Dispose 方法。
  • 后续代码可能仍使用该资源,这将导致状态错误,因此不推荐使用该形式。
image-20231028150426907
图10.13 资源声明在 using 语句之前

10.16 其他语句

表10.1 在其他章中阐述的语句
image-20231028150520397

相关文章:

  • appium操控微信小程序的坑
  • Centos 7 安装 Docker Enginee
  • rabbitmq-3.8.15集群、集群镜像模式安装部署
  • 【Python3】【力扣题】202. 快乐数
  • 使用Golang与Web3.js进行区块链开发
  • 体育竞技分析
  • 前端Vue页面中如何展示本地图片
  • 4、QtCharts 做心电图
  • Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序
  • css样式中 before、after 里面的 content 乱码
  • 修改svc的LoadBalancer的IP引发的惨案
  • C++11的lambda表达式
  • nlp之加载电商评论集
  • 真机环境配置教程
  • 项目进度延误,危机管理5大注意事项
  • 【5+】跨webview多页面 触发事件(二)
  • Angular数据绑定机制
  • Apache的基本使用
  • Hibernate最全面试题
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Javascript基础之Array数组API
  • JS变量作用域
  • Leetcode 27 Remove Element
  • Median of Two Sorted Arrays
  • mongodb--安装和初步使用教程
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PHP变量
  • spark本地环境的搭建到运行第一个spark程序
  • springMvc学习笔记(2)
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 强力优化Rancher k8s中国区的使用体验
  • 实现简单的正则表达式引擎
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微服务核心架构梳理
  • 说说我为什么看好Spring Cloud Alibaba
  • ​比特币大跌的 2 个原因
  • (C)一些题4
  • (C语言)二分查找 超详细
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (十八)三元表达式和列表解析
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)德国人的记事本
  • (转载)hibernate缓存
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .Mobi域名介绍
  • .NET Framework .NET Core与 .NET 的区别
  • .pop ----remove 删除
  • ::什么意思
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略