C#NET程序设计.ppt_第1页
C#NET程序设计.ppt_第2页
C#NET程序设计.ppt_第3页
C#NET程序设计.ppt_第4页
C#NET程序设计.ppt_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualC NET程序设计 主讲 李园 Email liyuan98 涟钢电大计算机教研室 第二讲C 基础 第一节 VS NETIDE简介第二节 C 程序结构第三节 数据类型第四节 变量和常量第五节 类型转换第六节 C 的表达式第七节 流程控制第八节 命名空间 第一节 VS NETIDE简介 VisualStudio Net集成环境 IDE集成环境的特点 VC Net VB Net VisualC 使用同样的用户界面 使用统一的通用平台 开发环境 更加方便和宜用窗口 可以任意拖动 停靠界面 更加整洁 更加漂亮并且可以任意定制风格 VisualStudio NET主要的功能特色 语言增强 VB C 和JScript均已更新 还引入了一种新语言C 这些语言都利用了 NET框架的功能 此框架提供了对简化ASPWeb应用程序和XMLWebServices开发的关键技术的访问 Web窗体 Web窗体是用于创建可编程Web页的ASP NET技术 Windows窗体 它是基于 NET框架的新的Windows应用程序开发平台 XMLWebservices 它是可以通过HTTP使用XML接收请求和数据的应用程序 XML支持 NET完全支持XML 提供了XML设计器以使编辑XML和创建XML架构更容易 IDE中的常用窗口介绍 Solution解决方案窗口 选择视图 解决方案资源管理器 可以打开解决方案窗口 从而可以观察所创建的各个工程项目一个解决方案可以包含多个工程项目文件 而一个工程文件中包含多个C 文件 类视图窗口 选择视图 类视图 可以打开类窗口 从而可以以树形观察所创建的工程中的各个类的结构 双击类名会打开该类的头文件以显示出类的声明 而双击类中的成员 可以显示出该成员的定义代码 属性窗口 选择视图 属性窗口 可以打开属性窗口 可以编辑和查看文件 工程和方案属性 同时也可以编辑修改所选中对象的属性和事件 在设计视图中双击所选中的对象可以直接添加事件 工具箱窗口 选择视图 工具箱 可以打开工具箱窗口 可以通过拖放方式来使用它们 IDEAPI类中成员帮助窗口内的成员图标的含义 无钥匙的是public成员 有钥匙的是protected成员 带 s 的为静态成员 对象浏览器窗口 选择视图 其它窗口 对象浏览器 可以打开对象浏览器 其作用为 查看对象及其成员定义显示对象的继承关系及相应的接口查看 NET中的类库的继承关系IDE中的内嵌的浏览器 选择视图 Web浏览器 显示浏览器 可以打开该窗口 API类中成员帮助即在此中显示 IDE提供的C 应用程序类型或向导 Windows应用程序类库Windows控件库智能设备应用程序ASP NET应用程序ASP NETWEB服务ASP NET移动WEB应用程序WEB控件库控制台应用程序WINDOWS服务空项目 安装和部署项目安装项目WEB安装项目合并模块项目CAB项目安装向导企业级项目业务外观业务规则数据访问用户界面ACT项目数据库项目 第二节 C 程序结构 程序实例 文本控制台程序 usingSystem HelloWorld的摘要说明 classHelloWorld 应用程序的主入口点 staticvoid Console WriteLine HelloWorld 将文件保存为HelloWorld cs 其中 cs 是C 源代码文件的扩展名 然后编译该文件 可以得到编译输出文件HelloWorld exe 执行它时可得到下面的输出 HelloWorld 注意 应该选择 程序 MicrosoftVisualStudio NET VisualStudio NET工具 VisualStudio NET命令提示或者设置系统环境变量 指向 NETFramework 路径 C WINDOWS Microsoft NET Framework v1 1 4322 HelloWorld cs的程序结构分析 1 注释语句 C 中支持三种注释方法 但注释之间不能嵌套以 开始的单行注释 C 方式 以 配对使用的多行注释 C方式 的文档注释 C 方式 2 using usingSystem 语句这是C 语言的using命名空间指示符 利用它来导入一个名字空间中的内容 这样在程序中就可以直接使用该空间中的元素 这里的 System 是Microsoft NET系统提供的类库 3 HelloWorld类 在程序中声明并实现了一个含有静态Main 函数的HelloWorld类 注意 C 所有的声明和实现都要放在同一个文件里 不像C 那样可以将两者分离 4 Main 函数的格式 C 中的Main 函数 它必须封装在类或结构里来提供可执行程序的入口点 它必须为静态函数 static 这允许C 不必创建实例对象即可运行程序 它的保护级别没有特殊要求 可以为public protected private等都可 但一般我们都指定其为public 它的第一个字母要大写 否则将不具有入口点的语义 C 是大小写敏感的语言 Main 函数的参数只有两种参数形式 无参数和string数组表示的命令行参数Main 带命令行参数数组Main string args 一个C 程序中只能有一个Main 函数入口点 C 不推荐通过其他参数形式重载Main 函数 这会引起编译警告 Main 函数返回值只能为void 无类型 或int 整数类型 其他形式的返回值不具有入口点语义 C 程序的编译与执行步骤 编辑C 源程序 程序文件名后缀为 cs 使用C 语言编译器对C 源程序进行编译 产生一个受控代码文件 EXE或 DLL 该文件是一个有效的 PE 可移植 格式文件 在执行 exe或 dll文件时 CLR的类加载器负责装载所需类型 并且为类型的每个方法创建并连接上一段占位代码 及时编译器会根据机器体系结构的不同把IL中间代码 IL代码使得所有 NET平台的高级语言如C VB NET VC NET等得以平台独立 以及语言之间实现互操作和混合编程 编译成为目标机上的可执行的本地代码并进行类型安全检查 然后执行方法的本地代码 设计一个命令行方式 控制台应用程序 的C 程序 功能自定义目的 熟悉C 程序的结构和Main 格式熟悉命令行编译环境和命令行参数的编程 小练习 第三节 数据类型 值类型简单类型枚举类型结构类型引用类型类类型接口类型委托类型数组类型 应用程序总是需要处理数据类型 而现实世界中的数据类型多种多样 C 的数据类型可以分为两种类型 整数类型 整数类型 布尔类型 布尔类型布尔类型是用来表示 真 和 假 这两个概念的 我们知道 计算机实际上就是用二进制来表示各种数据的 即不管何种数据 在计算机内部都采用二进制方式进行处理和存储 在C 中可能值为true和false 在bool和其他类型之间不存在标准转换 具体说来 bool类型与整型截然不同 不能用bool值代替整数值 反之亦然 注意 在C和C 语言中 零整数或浮点值或空指针可以转换为布尔值false 非零整数或浮点值或非空指针可以转换为布尔值true 在C 中 这种转换是通过显式地将整数或浮点值与零进行比较 或者显式地将对象引用与null进行比较来完成的 例如 boolx 1 错误 不存在这种写法 只能是 x trueorx false 实数类型 浮点类型C 支持两种浮点型 float和double float和double类型用32位单精度和64位双精度IEEE754格式来表示 这些格式提供以下几组值 float32位double64位类型大致范围精度float 1 5 E 45到 3 4 E 387位double 5 0 E 324到 1 7 E 30815到16位把浮点数转换成整数的时候 总是转换成接近0的那个整数 十进制类型C 还专门为我们定义了一种十进制类型 decimal 主要方便我们在金融或货币方面的计算 decimal类型可以表示具有28或29个有效数字 从1 0 E 28到大约7 9 E 28范围内的值 字符类型 字符类型除了数字以外 计算机处理的信息主要就是字符了 字符包括数字字符 英文字母 表达符号等 C 提供的字符类型按照国际公认的标准 采用Unicode 一个Unicode标准字符的长度为16位 用它可以表示世界上大多数语言 值类型 结构类型 利用上面介绍过的简单类型 我们在进行一些常用的数据运算 文字处理似乎已经足够了 但是我们会经常碰到一些复杂的数据类型 比如 通讯录中的数据可以包含他人的姓名 电话 地址 性别 年龄等 如果按照简单类型来管理 每一条记录都要放在多个变量中 这样工作量很大 也不够直观 有没有更好的办法呢 回答是肯定的 把一系列相关的变量组织成为一个单一实体的过程 我们称为生成结构的过程 把这个单一实体的类型就叫做结构类型 每一个变量称为结构的成员 结构用struct声明 结构类型是一种值类型 它可以声明常数 字段 方法 属性 索引器 运算符 实例构造函数 静态构造函数和嵌套类型 结构与类很相似 都表示可以包含数据成员和函数成员的数据结构 但是 与类不同 结构是一种值类型 并且不需要堆分配 结构类型的变量直接包含结构的数据 而类类型的变量包含对数据的引用 后者称为对象 结构类型示例 通讯录数据结构publicstructMyPhoneBook publicstringname publicstringphone publicuintage publicbytesex publicstructAddress publicstringcity publicstringstreet 值类型 枚举类型 enum关键字用于声明枚举 即一种由一组称为枚举数列表的命名常数组成的独特类型 每种枚举类型均有一种基础类型 此基础类型可以是除char类型外的任何整型 枚举元素的默认基础类型为int 默认情况下 第一个枚举数的值为0 后面每个枚举数的值依次递增1 枚举 enum 实际上是为一组在逻辑上密不可分的整数提供便于记忆的符号 比如 我们可以声明一个表示星期的枚举型变量 enumDays Sat 1 Sun Mon Tue Wed Thu Fri 注意 结构是由不同类型的数据组成的一组新的数据类型 结构类型的变量的值是由各个成员的值组合而成 而枚举则不同 枚举类型的变量在某一时刻只能取枚举中的某一个元素的值 示例 usingSystem namespacedemo publicclassEnumDemo 强制元素序列从1而不是0开始 默认从0开始enumDays Sat 1 Sun Mon Tue Wed Thu Fri publicstaticvoidMain intx int Days Sun inty int Days Fri Console WriteLine Sun 0 x Console WriteLine Fri 0 y Console WriteLine Days Thu Console ReadLine 装箱和拆箱 C 语言类型系统提出的一个核心概念 装箱 boxing 拆箱 unboxing 装箱和取消装箱的概念是C 的类型系统的核心 它在 值类型 和 引用类型 之间的架起了一座桥梁 使得任何 值类型 的值都可以转换为object类型的值 反过来转换也可以 装箱和取消装箱使我们能够统一地来考察类型系统 其中任何类型的值最终都可以按对象处理 1 装箱转换装箱转换是指将一个值类型隐式转换为object类型 或者把这个值类型转换成一个被该值类型应用的接口类型 把一个值类型的值装箱 也就是创建一个object实例并将这个复制给这个object 例如 inti 10 Objectobj i 将 值类型 的值装箱的操作包括 分配一个对象实例并将 值类型 的值复制到该实例中 2 拆箱转换和装箱转换正好相反 拆箱转换是指将一个对象类型显式的转换为值类型 或是将一个接口类型显式的转换为一个执行该接口的值类型 拆箱过程分为两步 首先 检查这个对象实例 看他是否为给定的值类型的装箱值 然后把这个实例的值拷贝给值类型的变量 例如 Inti 10 Objectobj I Intj int obj 必须注意 装箱转换和拆箱转换必须遵循类型兼容原则 第四节 变量和常量 变量程序要对数据进行读 写 运算等操作 当需要保存特定的值或者计算结果时 就需要用到变量 在用户看来 变量是用来描述一条信息的名称 在变量中可以存储各种类型的信息 比如 姓名 地址等 在计算机中 变量代表存储地址 变量的类型决定了存储在变量中的数值的类型 C 是一种安全类型语言 它的编译器存储在变量中的数值具有适当的数据类型 同时变量的值可以通过操作运算符进行运算并改变 在C 中 使用变量的一个重要原则是 变量必须先定义后使用 1 命名变量当我们需要访问存储在变量中的信息时 我们只需要使用变量的名称 为变量命名时应当遵循C 语言的规定 变量名必须以字母开头 变量名只能由字母 数字 下划线组成 而不能包含空格 标点符号 运算符等其它符号 变量不能与C 中的关键字相同 变量名不能与C 中的库函数名称相同 但在C 中有一点例外 就是允许在变量名前加上前缀 这样就可以使用前缀加上关键作为变量名了 这主要是为了与其他语言进行交互式避免冲突 不推荐使用这样的变量名 示例 合法 IntI stringstrAddress char use 非法 stringuse 关键字 2 变量的类型在C 语言中 定义了七种变量类别 静态变量 staticvariables 实例变量 instancevariables 数组元素 arrayelements 值参数 valueparameters 引用参数 referenceparameters 输出参数 outputparameters 以及局部变量 localvariables 静态变量 带有static修饰符声明的变量称为静态变量 一旦静态变量所属的类被装载 直到包含该类的程序运行结束时他一直存在 静态变量的初始值就是改变量类型的默认值 为了便于定义赋值检查 最好是在定义静态变量时赋值 如 staticintx 10 实例变量 不带有static修饰符声明的变量称为实例变量 实例变量随着它所属类的实例的存在而存在 同样为了便于赋值检查 最好是在定义变量时赋值 如 intx 20 数组元素 数组元素也是变量的一种 该变量随该数组实例的存在而存在 同样为类便于赋值检查 数组元素最好是在初始时赋值 局部变量 局部变量是指在一个独立的程序块 一个for语句 一个switch语句或者using语句中声明的变量 它只在该范围中有效 与其他便量类型不同的是 局部变量不会自动初始化 所以也就没有默认值 变量 形参 使用说明 1 静态变量静态变量和实例变量主要是针对类或结构内的数据成员 又叫域 而言的 静态变量在它寄存的类或结构类型被装载后得到存储空间 如果没有对它进行初始化赋值 静态变量的初始值将是它的类型所持有的缺省值 对静态变量的访问只能通过类型名 而不能通过对象名访问 2 实例变量实例变量在它的类实例 对象 被创建后获得存储空间 如果没有经过初始化赋值 它的初始值与静态变量的定义相同 其初始值将是它的类型所持有的缺省值 对实例变量的访问只能通过对象名访问 3 传值形参 引用形参 输出参数 数组参数主要针对方法的参数类型而言的 简单地讲传值形参是对变量的值的副本的一种传递 方法内对变量的改变在方法体外不起作用 4 引用形参引用形参是对变量的地址的一种传递 方法内对该变量的任何改变都将在方法体外保留 无论在定义还是在使用时 都必须采用ref修饰符加以说明 传值参数传递的是调用参数的一份拷贝 而传地址参数 引用 传递的是调用参数的内存地址 该参数在方法内外指向的是同一个存储位置 引用形参事例 usingSystem namespacedemo RefDemo classRefTest staticvoidSwap refintx refinty inttemp x x y y temp 在方法内部对调x y 其实是对调外边的i j staticvoidMain inti 1 j 2 Swap refi refj Console WriteLine i 0 j 1 i j Console ReadLine 显示i 2 j 1 5 输出形参输出形参数是C 专门为有多个返回值的方法而量身定做的 它类似于引用变量 但可以在调用方法体之前不进行初始化但在被调用的方法返回前必须对该变量进行赋值 而其他的参数在进入方法体内C 都要求明确的初始化 无论在定义还是在使用时 都必须采用out修饰符 在传值和传址情况下 C 强制要求参数在传入之前由用户明确初始化 否则编译器报错 但如果有一个并不依赖于参数初值的函数 只是需要函数返回时得到它的值时该怎么办呢 往往在我们的函数返回值不至一个时特别需要这种技巧 但需要记住输出参数与通常的函数返回值有一定的区别 函数返回值往往存在堆栈里 在返回时弹出 而输出参数需要用户预先制定存储位置 也就是用户需要提前声明变量 当然也可以初始化 实例 demo OutDemo 6 数组形参数组形参是为传递大量的数组元素而专门设计的 它从本质上讲是一种引用型变量的传值参数 数组参数需要修饰符params 它可以是数组如 a 也可以是能够隐式转化为数组的参数如 10 20 30 40 params关键字可以指定在实参数目可变处使用方法参数 在方法声明中的params关键字之后不允许任何其它参数声明 并且在方法声明中只允许一个params关键字 实例 demo ParamsDemo 值类型与引用类型变量对比 值类型的变量本身包含他们的数据值 将存储在栈中 它直接包含数据值 每个变量有它们自己的数据拷贝 对其中一个的操作不会影响另一个 而引用类型的变量包含的是指向包含数据值的内存块的位置信息 将存储在受控的堆中 注意 C 语言中布尔类型严格与数值类型区分 只有true和false两种取值 不存在像C C 里那样和其他类型之间的转换 引用类型共分四种类型 类 接口 数组 委派 usingSystem classCValue publicintValue 0 classTest staticvoidMain intval1 0 声明并初始化val1 0intval2 val1 声明并采用val1来初始化val2 0val2 123 改变val2 123 但val1 0CValueref1 newCValue CValueref2 ref1 ref1与ref2指向同一个内存地址ref2 Value 123 同时改变了ref1与ref2 因为它们引用了同一对象的实例 当改变其中一个时 就会影响到另一个的值 值类型与引用类型变量使用对比 UsingSystem classChinese staticColorskinColor Color Yellow stringName classVarTest staticvoidMain Chinesezhang newChinese zhang Name ZhangHua Colorcolor Chinese skinColor 静态变量 实例变量 注意两者使用的方式不同 C 中的变量应用要点 1 静态变量与实例变量 C 中的变量应用要点 2 传值形参与引用形参 传值形参是对变量的值的副本的一种传递 方法内对变量的改变在方法体外不起作用 引用形参是对变量的地址的一种传递 该参数在方法内外指向的是同一个存储位置 方法内对该变量的任何改变都将在方法体外保留 引用形参无论在定义还是在使用时 都必须采用ref修饰符加以说明 传值参数传递的是调用参数的一份拷贝 而传地址参数 引用 传递的是调用参数的内存地址 usingSystem classRefTest staticvoidSwap refintx refinty inttemp x x y y temp 在方法内部对调x y 其实是对调外边的i j staticvoidMain inti 1 j 2 Swap refi refj Console WriteLine i 0 j 1 i j 显示i 2 j 1 请注意C 中的引用形参的定义与C C 中的不同 请注意C 中的引用形参的调用与C C 中的不同 C 中的变量应用要点 3 输出形参数 它类似于引用变量 但可以在调用方法体之前不进行初始化但在被调用的方法返回前必须对该变量进行赋值 而其他的参数在进入方法体内C 都要求明确的初始化 无论在定义还是在使用时 都必须采用out修饰符 输出参数与通常的函数返回值有一定的区别 函数返回值往往存在堆栈里 在返回时弹出 而输出参数需要用户预先制定存储位置 也就是用户需要提前声明变量 当然也可以初始化 应用场合 为有多个返回值的方法而量身定做的 C 中的变量应用要点 4 数组形参 它是为传递大量的数组元素而专门设计的 从本质上讲是一种引用型变量的传值参数 数组参数需要修饰符 实参数目可变 params 常量所谓常量 就是其值固定不变的量 从数据类型角度看 常量可以是任何值类型或引用类型 例如 publicconststringstrConst Thisisaconst 注意 常量的声明必须包含关键字const和数据类型 常量名称 常量值等要素 针对数据类型 变量和常量的相关知识 设计一个控制台应用程序 功能自定义 完成如下实验 实验一 定义和使用结构 枚举数据类型实验二 定义和使用变量 主要实验引用形参 输出形参 数组形参方面 实验练习 第五节 类型转换 隐式类型转换 隐式转换就是系统默认的 不需要加以声明就可以进新的转换 在隐式转换过程中 编译器不需要对转换进行详细检查就能够安全的执行转换 隐式转换一般不会失败 也不会损失精度 包括 隐式数值转换隐式枚举转换隐式引用转换显式类型转换显式类型转换又叫强制类型转换 与隐式转换正好相反 显示转换需要用户明确地指定转换类型 包括 显式数值转换显式枚举转换显式引用转换 在C 语言中 一些预定义的数据类型之间存在着预定义的转换 比如 从int转换到long C 语言中的数据类型转换可以分为隐式转换和显式转换两种 第六节 C 表达式 表达式是一个运算符和操作数的序列 本节介绍C 语法 操作数和运算符的计算顺序以及表达式的含义 操作符的分类表达式由操作符和操作数组成 表达式的操作符指出了对操作数的操作 比如 操作符有 和new等等 操作数可以是文字 域 当前变量或表达式 依照操作符操作的操作数的个数分类 C 的操作符可以分为三类 一元操作符 一元操作符作用于一个操作数 一元操作符又包括前缀操作符和后缀操作符 二元操作符 二元操作符作用于两位操作数 使用时在两个操作数之间插入操作符 三元操作符 C 中只有一个三元操作符 三元操作符作用于三个操作数 使用时在操作数之间插入操作符 下表按照从最高到最低的优先级顺序概括了所有的运算符 算术操作符和算术表达式C 中提供的算术操作符五种 加法操作符 可用于整数类型 实数类型 枚举类型 字符串类型和委托类型 减法操作符 可用于整数类型 实数类型 枚举类型 字符串类型和委托类型 乘法操作符 可用于整数类型和实数类型的乘法运算 除法操作符 可用于整数类型和实数类型的除法运算 在除法运算过程中 默认的返回值的数据类型是操作数种类型最高的数据类型 求余操作符 运算符用来求除法的商 而 y则用来求除法的余数 该运算符适用于整数类型 实数类型和十进制类型 赋值操作符和符值表达式赋值运算符为变量 属性 事件或索引器元素赋新值 赋值操作符 关系操作符和关系表达式C 关系操作符 is和as运算符称为关系和类型测试运算符 其中 运算符是比较运算符 对于xopy形式为 其中op为比较运算符 的运算 应用重载决策以选择特定的运算符实现 操作数转换为所选运算符的参数类型 结果的类型是该运算符的返回类型 预定义的比较运算符详见下面各节的介绍 所有预定义的比较运算符都返回bool类型的结果 详见下表 位运算符在C 中 包含六个位运算符 与 运算符既可作为一元运算符也可作为二元运算符 作为一元运算符需要unsafe 或 异或 取补 右移 其中取补只有一个操作数 而其它的位操作符都有两个操作数 这些运算符都不会产生溢出 位操作符的操作数为整型或者是可以转换为整型的任何其它类型 针对整型和布尔型 移位运算符 移位运算实际上是乘2或者除以2 而V1 V2 相当于V1 2的V2次方 移位运算比实际的乘除速度要快得多 实例 demo 位运算 逻辑操作符C 语言提供了三种逻辑操作符 逻辑与 逻辑或 逻辑非 是对操作数求反的二进制运算符 当且仅当操作数为false时才返回true C 中的几个特殊操作符 asisnewtypeofsizeofStackalloc下面详细地介绍它们的用法 操作符as的用法 作用 as操作符用于执行兼容类型之间的转换 类似于强制类型转换 当转换失败时 as操作符结果为null 它比常规的强制类型转换的优点在于 如果被转换的值无法转换 此时转换的结果为null 而不会产生异常 用途 利用它实现将基类的对象转换为派生类对象 从而访问子类中的所增加的成员 格式 BaseasDerived 操作符as的用法 程序例 Personyou newPerson Chineseme newChinese me youasChinese 或me Chinese you将you转换为Chinese对象As与强制类型转换的不同 Pointpoint newPoint 10 10 Personme newPerson me Person point 此时产生异常但me pointasPerson 此时me为null 操作符is的用法 作用 is操作符用于检查对象的运行时类型是否与给定类型兼容 是否为它的对象或起子类的对象 可能的值 当表达式非null且可以转化为指定类型时 is操作符结果为true 否则为false 要点 as和is操作符是基于同样的类型鉴别和转换而设计的 两者有相似的应用场合 实际上expressionastype相当于expressionistype type expression type null 应用示例 if pisPoint 返回为true elseif pisObject 返回为true 用途 识别对象的类型 is的用法例 设计出一个针对不同人的 做饭 方法voidCook Personman if manisChinese 如果识别是中国人则按照中国人的习惯来Cook elseif manisAmerican 如果识别是美国人则按照美国人的习惯来Cook 操作符new的用法 作用 new主要用于在堆上创建对象 如创建对象 数组和代理等 和调用构造函数 new也可用于修饰符 用于隐藏基类的成员 为隐藏继承的基类成员 使用相同名称在派生类中声明该成员并用new修饰符重写它 如果嵌套类型隐藏在另一种类型中 可以采用new限定符来修改嵌套类型要点 值得注意的是值类型对象 例如结构 是在栈上创建的 而引用类型对象 例如类 是在堆上创建的 其它几个特殊运算符的用法 typeof 用于获得某一类型的System Type对象 它不能被重载 如 TypetVal typeof Point 从而获得Point类的类型的System Type对象 可以使用Type类中的方法 可以获取关于该对象所在的类型声明的信息 sizeof 用于获得指定的值类型 不适用于引用类型 在内存中所占用的字节数 它只能用在非安全代码中并且不能被重载 Stackalloc 它用来为局部指针变量分配栈内存空间 它只能用在非安全代码中 并且无法被显示地释放 只在方法执行完后被自动释放 第七节 流程控制 和大多数编程语言相似 在程序模块中 C 可以通过条件控制语句控制程序的流程 从而形成程序的分支和循环 C 中提供以下控制关键字 选择控制 if else switch case循环控制 while do for foreach跳转语句 break continue编译控制 if else endif elif异常处理 try catch finally 条件语句当程序中需要进行两个或两个以上的选择时 可以根据条件判断来选择将要执行的一组语句 C 提供的选择语句包括if和switch语句 If语句 if elseif语句是表达式求得true值时执行代码块的控制语句 它的形式为 if expression statement1 elsestatement2 备注 如果expression为true 则执行statement1 如果可选的else子句存在并且expression求得false值 则执行statement2 执行if语句之后 控制传递给下一个语句 Switch语句 If语句每次判断只能实现两条分支 如果要实现多种选择的功能 那么可以采用switch语句 switch语句根据一个控制表达式的值选择一个内嵌语句来执行 他的一般格式为 switch expression caseconstant expression statementjump statement default statementjump statement 此处 备注 控制传递给constant expression与expression匹配的case语句 switch语句可以包含任意数量的case实例 但同一switch语句中的两个case常数不能具有相同的值 语句体从选定的语句开始执行 一直执行到jump statement将控制传递到case体之外为止 请注意 每个块 包括最后一个块 不管它是case语句还是default语句 后都要有jump statement 与C switch语句不同 C 不支持从一个case标签显式贯穿到另一个case标签 如果要使C 支持从一个case标签显式贯穿到另一个case标签 可以使用goto一个switch case或gotodefault 如果expression不匹配任何constant expression 则控制传递给可选的default标签后面的statement 如果没有default标签 则控制传递到switch之外 实例 参见word文档P36 循环语句循环语句可以实现一个程序模块的重复执行 它对我们简化程序 更好的组织算法有很重要的意义 C 为我们提供了四种循环语句 分别适用于不同的情形 while语句dowhile语句for语句foreach语句 While语句 while语句按不同条件执行一个嵌入语句零次或多次 while语句 while boolean expression embedded statement while 布尔表达式 嵌入语句 while语句按如下规则执行 计算布尔表达式 如果布尔表达式产生true 控制将转到嵌入语句 当 如果 控制到达嵌入语句的结束点 可能是通过执行一个continue语句 时 控制将转到while语句的开头 如果布尔表达式产生false 控制将转到while语句的结束点 在while语句的嵌入语句内 break语句可用于将控制转到while语句的结束点 从而结束嵌入语句的迭代 而continue语句可用于将控制转到嵌入语句的结束点 如果while语句是可到达的且布尔表达式不具有常数值false 则该while语句的嵌入语句是可到达的 如果下列条件中至少有一个为真 则while语句的结束点是可到达的 while语句包含一个可到达的break语句 它用于退出while语句 while语句是可到达的且布尔表达式不具有常数值true 示例 classWhileDemo staticvoidMain string args inti 1 while i 5 Console WriteLine 循环 i ToString 次 r n i Console ReadLine Do while语句do while与while语句不同的是 它将内嵌语句执行一次 至少一次 或若干次 do语句 doembedded statementwhile boolean expression do嵌入语句while 布尔表达式 do while语句按如下规则执行 控制转到嵌入语句 当 如果 控制到达嵌入语句的结束点 可能是通过执行一个continue语句 时 计算布尔表达式 如果布尔表达式产生true 控制将转到do语句的开头 否则 控制转到do语句的结束点 在do语句的嵌入语句内 break语句可用于将控制转到do语句的结束点 从而结束嵌入语句的迭代 而continue语句可用于将控制转到嵌入语句的结束点 从而执行do语句的另一次迭代 如果do语句是可到达的 则do语句的嵌入语句是可到达的 如果下列条件中至少有一个为真 则do语句的结束点是可到达的 do语句包含一个可到达的break语句 它用于退出do语句 嵌入语句的结束点是可到达的且布尔表达式不具有常数值true 示例 classDoWhileDemo staticvoidMain string args inty 0 do y Console WriteLine do while循环 y ToString 次数 r n while y 5 Console ReadLine for语句For语句是C 中使用频率最高的循环语句 在事先知道循环次数的情况下 使用for语句是比较方便的 for语句计算一个初始化表达式序列 然后 当某个条件为真时 重复执行相关的嵌套语句并计算一个迭代表达式序列 for语句 for for initializeropt for conditionopt for iteratoropt embedded statement for for初始值设定项可选 for条件可选 for迭代程序可选 嵌入语句 for语句按如下规则执行 如果存在for初始值设定项 则按变量初始值设定项或语句表达式的编写顺序执行它们 此步骤只执行一次 如果存在for条件 则计算它 如果不存在for条件或如果计算产生true 控制将转到嵌入语句 当 如果 控制到达嵌入语句的结束点 可能是通过执行一个continue语句 时 则按顺序计算for迭代程序的表达式 如果有的话 然后从上述步骤中的计算for条件开始 执行另一次迭代 如果存在for条件 且计算产生false 控制将转到for语句的结束点 示例 classForDemo staticvoidMain string args stringstr ABCDEFGHIJKLMN for inti 0 i str Length i Console WriteLine str i Console ReadLine foreachin语句foreach语句为数组或对象集合中的每个元素重复一个嵌入语句组 foreach语句用于循环访问集合以获取所需信息 但不应用于更改集合内容以避免产生不可预知的副作用 此语句的形式如下 foreach typeidentifierinexpression statement此处 type identifier的类型 identifier 表示集合元素的迭代变量 expression 对象集合或数组表达式 集合元素的类型必须可以转换为identifier类型 statement 要执行的嵌入语句 备注 嵌入语句为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论