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

下载本文档

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

文档简介

Web技术与应用 科学出版社 第4章C 程序设计语言 第4章C 程序设计语言 4 1C 语言概述4 2C 应用程序的创建4 3命名空间4 4C 程序结构4 5C 基础语法4 6C 面向对象高级编程 4 1C 语言概述 C 是微软公司为 NETFramework量身打造的高级编程语言 它从C和C 语言演化而来 并且借鉴了其他语言的诸多特点 例如VisualBasic的易用性和Java的灵活性等 同时它还增加了许多新的特性 C 的更强大之处在于 它能够使用全部的Win32API甚至更多 C 的基本语法结构与C Java相似 且与Windows操作系统的体系结构紧密结合 因此C 很容易掌握 4 1C 语言概述 C 语言具有特点 语法简洁 层次清淅完全的面向对象设计更强大的安全机制统一的类型系统 4 2C 应用程序的创建 创建C 控制台应用程序用VisualStudio2010创建C 应用程序 4 2 1创建C 控制台应用程序 使用VisualStudio2010附带的命令行C 编译器 csc exe 编译程序 可创建C 控制台应用程序 usingSystem namespacemyApplication classuser publicstaticvoidMain string args Console WriteLine HelloWorld Console ReadLine return 例4 1 创建一个简单的C 程序 编译并运行输出结果 该程序的功能是在命令控制台上输出一行信息 当按下回车键后 该程序退出 然后 使用VisualStudio2010附带的命令行C 编译器 csc exe 编译程序 选择 开始 所有程序 MicrosoftVisualStudio2010 VisualStudioTools VisualStudio2010命令提示 启动VisualStudio2010命令提示工具 在命令提示符中 将盘符路径改为包含该C 源代码的目录 输入如下命令 cscExample4 1 cs 首先 在文本编辑器中输入如下代码 保存为Example4 1 cs文件 例4 1 续 编译程序之后 会在目录生成一个名为Example4 1 exe的可执行文件 输入如下代码以执行该应用程序 Example4 1 exe 4 2 2用VisualStudio2010创建C 应用程序 1 单击 文件 新建 项目 弹出 新建项目 对话窗口 2 在左侧 项目类型 列表框选中选择 VisualC Windows 在 模板 列表框中选择 控制台应用程序 在 名称 文本框中输入 Example4 1 在 位置 文本框中输入项目保存的位置 若选中 创建解决方案的目录 复选框 VisualStudio将在 位置 指定的路径下新建一个以 解决方案名称 命名的文件夹 同时在该文件夹下新建一个名为 Example4 1 的文件夹 4 2 2用VisualStudio2010创建C 应用程序 3 单击 确定 4 在代码编辑区域输入上例中的程序代码 由于VisualStudio会根据创建项目时所选择的模板 自动为当前项目生成若干行代码 因此 在本示例中 可只在Main 方法中输入如下代码 Console WriteLine HelloWorld Console ReadLine return 5 按下F5键 或者单击VisualStudio工具栏上的 启动调试 按钮 即可调试当前程序并查看程序执行的效果 4 2 2用VisualStudio2010创建C 应用程序 VisualStudio2010控制台应用程序开发环境 图4 3VisualStudio2010 起始页 窗口 4 3命名空间 当同一段源程序所使用的两个 或是多个 类中存在相同的变量名或函数名 那么该源程序在编译时 编译器就不法确定发生重名的变量或函数属于哪一个类 NETFramework引入了命名空间这一概念 它与计算机文件系统中的文件夹类似 命名空间可使类具有唯一的完全限定名称 4 3 1什么是命名空间 命名空间是一个逻辑上的类型组织系统 它提供一个声明名称的区域 一个C 程序可以包含一个或多个命名空间 每个命名空间或者由程序员定义 或者作为之前编写的类库的一部分定义 例如 命名空间System包括Console类 该类包含读取和写入控制台窗口的方法 System命名空间也包含许多其他命名空间 如System IO和System Collections等 4 3 2两类命名空间 有两类命名空间 系统命名空间自定义命名空间 4 3 2两类命名空间 命名空间的定义规则为 命名空间的名称可以是任何合法的标识符 命名空间名可以包含句号 命名空间隐式具有公共访问权 且不可修改 可以在两个或多个声明中使用同一个命名空间 若未显式声明命名空间 则创建默认命名空间 默认命名空间存在于每一个文件中 usingSystem namespaceBinaryData classFileHandling publicvoidLoad codetoloadBinarydata namespaceASCIIData classFileHandling publicvoidLoad codetoloadanASCIIdata classProgram staticvoidMain BinaryData FileHandlingdata newBinaryData FileHandling data Load ASCIIData FileHandlingimage newASCIIData FileHandling image Load 例4 2 命名空间的使用示例 在编写一个读取二进制文件和文本文件的应用程序中 创建两个命名空间 一个名为BinaryData 另一个名为ASCIIData 这两个命名空间都拥有名为FileHandling的类和名为Load的方法 4 3 3引用命名空间 可以使用两种方式引用命名空间中的类 方式一 类的完整引用使用命名空间名作为类名前缀例如 引用 例4 2 定义的命名空间BinaryData的FileHandling类 使用如下代码 BinaryData FileHandling 4 3 3引用命名空间 方式二 使用using加载命名空间using是引用命名空间的指令 语法规则为 usingNamespace 加载命名空间如 例4 1 中的Console WriteLine方法 通过在代码段头部编写 usingSystem 使得在当前程序文件中所有使用到 System Console 的地方 都可以简写为 Console 省去了 System 标准的System命名空间中封装了很多最基本最常用的操作 几乎所有的C 程序都需要使用System命名空间中的类 4 4C 程序结构 典型的C 程序架构如下 usingSystem namespacens1 命名空间classmyClass1 类定义 其他定义 4 4C 程序结构 1 C 程序由类组成 类似于C程序由函数组成 每个程序可定义多个类 但只允许一个类是主类 主类即包含Main方法的类 是程序执行的入口点 2 每个C 程序可包含一个或多个命名空间 3 利用using加载 NET类库 类似于C程序中 include包含指令 凡是程序中用到的类 都要引用该类所对应的命名空间 4 一个语句可占多行 每行也可书写多个语句 语句结束符为 4 5C 基础语法 4 5 1关键字4 5 2命名规则4 5 3数据类型4 5 4常量和变量4 5 5运算符与表达式4 5 6流程控制语句4 5 7异常处理 4 5 1关键字 4 5 2命名规则 1 一般标识符命名规则 首字符必须是字母 下划线 后面的字符可以是字母 数字或下划线 字母区分大小写 长度不能超过255 不能为关键字 4 5 2命名规则 2 变量命名规则变量名除遵循一般标识符命名规则的 外 还有以下规则 首字符必须是字母 下划线 或字符 其后可以是字母 数字 若首字符为 则第二个字符不能为数字 或下划线 当首字符为 时 其后可以是关键字 例如 string string Hello System Console WriteLine string 4 5 3数据类型 C 是一种强类型的语言 因此所有变量和对象必须有明确的数据类型 根据数据在系统内存中的存储位置和存储方式的不同 C 将数据类型分为两种 值类型引用类型 4 5 3数据类型 1 值类型值类型变量存储的是数据类型所代表的实际数据 C 语言中值类型可以分为 简单类型结构类型枚举类型 4 5 3数据类型 1 简单类型 usingSystem classProqram staticvoidMain string args intnum1 num2 num1 100 num2 num1 Console WriteLine num1 0 num2 1 num1 num2 num2 160 Console WriteLine num1 0 num2 1 num1 num2 Console ReadKey return 例4 3 简单类型示例 本例的输出结果如下 num1 100 num2 100 num1 100 num2 160 4 5 3数据类型 2 结构类型结构类型使用struct关键字定义 定义方法 struct结构名称 成员声明列表 usingSystem structStudent publicstringName 姓名publicuintAge 年龄publicstringPhone 电话publicvoidStudy Console WriteLine 学生开始学习 classTest publicstaticvoidMain StudentStudent1 声明一个结构类型Student的变量Student1Student1 Name 小王 Student1 Age 28 Student1 PhoneConsole WriteLine 姓名 0 年龄 1 电话 2 Student1 Name Student1 Age Student1 Phone Student1 Study Console ReadKey 例4 4 结构类型示例 本例的输出结果如下 姓名 小王 年龄 28 电话生开始学习 4 5 3数据类型 3 枚举类型枚举类型为定义一组可以赋给变量的命名整数常量提供了一种有效的方法 例如 需定义变量的值表示一周中的某一天 那么该变量只能存储7个有意义的值 若要定义这些值 就可以使用枚举类型 枚举类型是使用enum关键字声明的 usingSystem classProgram enumDays Sunday Monday Tuesday Wednesday Thursday Friday Saturday enumMonths byte Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec enumSeason Spring 1 Summer 3 Autumn 5 Winter Autumn 2 privatestaticvoidgetSeason Seasonseason switch season caseSeason Spring Console WriteLine 春 break caseSeason Summer Console WriteLine 夏 break caseSeason Autumn Console WriteLine 秋 break caseSeason Winter Console WriteLine 冬 break 例4 5 本例定义三个枚举类型Days Months和Season staticvoidMain string args getSeason Season Spring Console ReadKey 例4 5 续 默认情况下 枚举中每个元素的基础类型是int 可以使用冒号指定另一种整数值类型 如本例中的Months 其中每个元素的基础类型是byte 如果没有在枚举数列表中指定元素的值 则值将自动以1为步长递增 在本例中 Days Sunday的值为0 Days Monday的值为1 依此类推 创建新的Days对象时 如果不显式为其赋值 则它将具有默认值Days Sunday 0 也可以将任意值赋给枚举类型中的各个元素 如本例中的Season 输出结果如下 春 4 5 3数据类型 2 引用类型引用类型的变量中不直接保存实际数据本身 而是保存指向实际数据的引用 即地址 C 中引用类型包括 对象类型类类型字符串类型数组类型接口类型委托类型 4 5 3数据类型 1 对象 object 类型对象类型是所有其他类型的基类 C 中所有类型都直接或间接从object类型派生出来 因此 可以对一个object类型变量赋予任何类型的值 4 5 3数据类型 2 类 class 类型类描述了一组具有相同特征的对象 类类型是包含数据成员 函数成员和嵌套类型的数据结构 C 中既有预定义的类 如string Array 供用户直接使用 也允许用户自定义类 4 5 3数据类型 3 字符串 string 类型C 中将字符串视为对象 字符串类型string也是一种引用类型 专门用于对字符串的操作 其底层对应到 NET基类System String System String是一个功能强大且用途广泛的基类 封装了字符串的常用操作 如查找 比较 替换 求字串 求串长 大小写转换等 字符串的定义方法如下 stringstr1 声明一个字符串引用类型变量str1str1 中国 str1指向字符串 中国 stringstr2 江苏 声明一个字符串引用类型变量str2 并设置初始值 字符串搜索 IndexOf stringstr1 ABC123 inti str1 IndexOf C i 2 字符串比较 Compare stringstr1 123456 stringstr2 123456 intn string Compare str1 str2 n 0 求串长 Length stringstr1 123456 inti str1 Length i 6 求子串 Substring stringstr1 123456 stringstr2 str1 Substring 2 2 str2 34 删除部分字符串 Remove stringstr1 123456 stringstr2 str1 Remove 0 2 str2 3456 字符串插入 Insert stringstr1 123456 stringstr2 str1 Insert 3 ABC str2 123ABC456 字符串替换 Replace stringstr1 123456 stringstr2 str1 Replace 123 ABC str2 ABC456 其它数据类型转换为字符串 ToString inti 123 stringstr1 i ToString str1 123 大小写转换 ToLower ToUpper stringstr AaBbCc stringstr1 str ToLower 字符转换为小写stringstr2 str ToUpper 字符转换为大写 删除前后空格 Trim stringstr1 123456 stringstr2 str1 Trim str2 123456 4 5 3数据类型 4 数组 Array 类型数组是一组类型相同的有序数据 数组按照数组名 数据元素的类型和维数来进行描述 C 语言中数组是System Array类对象 数组的声明和初始化 一维数组声明的语法格式如下 数据类型 数组名 例如 int age 声明整型数组age数组在使用前必须初始化 数组初始化可使用new运算符 语法格式如下 数组名 new数据类型 数组大小 值表 例如 age newint 5 18 19 21 18 20 可将数组声明与初始化同时进行 例如 int age newint 5 18 19 21 18 20 声明多维数组时 各维之间以逗号 分隔 例如 int arr2 1 2 3 4 数组类的属性和方法 Array类的一些常用属性和方法如下 Length属性 表示数组所有维数中元素的总数 Rank属性 表示数组的维数 Sort方法 对一维数组排序 Reverse方法 一维数组元素逆置 usingSystem namespacemyApplication classProgram publicstaticvoidMain string args int arr1 newint 6 10 8 20 15 100 5 for inti 0 i arr1 Length i 输出数组各元素值 Console Write Array 0 1 i arr1 i Array Sort arr1 排序Console WriteLine n排序后 for i 0 i arr1 Length i Console Write Array 0 1 i arr1 i Array Reverse arr1 逆置Console WriteLine n逆置后 for i 0 i arr1 Length i Console Write Array 0 1 i arr1 i Console ReadKey 例4 6 创建一个int类型包含6个元素的一维数组arr1 经初始化后各元素的值逐项输出 然后对其排序 逆置 再分别逐项输出 Array 0 10Array 1 8Array 2 20Array 3 15Array 4 100Array 5 5排序后 Array 0 5Array 1 8Array 2 10Array 3 15Array 4 20Array 5 100逆置后 Array 0 100Array 1 20Array 2 15Array 3 10Array 4 8Array 5 5 数组元素的访问 网工149 19 可通过下标访问数组的任意元素 如 arr1 i C 提供了遍历数组各元素的更简便的方法 即通过foreach循环语句实现对数组元素的逐一访问 避免了操作下标带来的麻烦 例如 foreach intnuminarr1 console WriteLine num 4 5 3数据类型 3 类型转换C 类型转换有 隐式转换显示转换 4 5 3数据类型 1 隐式转换隐式转换是指系统默认的 不需要加以声明就可以进行的转换 例如从int类型转换到long类型就是一种隐式转换 在隐式转换过程中 一般是低类型向高类型转化 能够保证值不发生变化 C 支持的隐式类型转换 4 5 3数据类型 2 显式转换显式类型转换 又称强制类型转换 显式转换需要明确地指定转换类型 显式转换可能导致信息丢失 usingSystem namespacemyApplication classProgram publicstaticvoidMain string args floata float MaxValue intb int a Int64c Int64 a Console WriteLine int 0 1 a b Console WriteLine int 0 1 a c Console ReadKey 例4 7 显式类型转换示例 本示例的输出结果如下所示 int 3 402823E 38 2147483648 int 3 402823E 38 9223372036854775808这是因为发生了溢出 可见显式类型转换时如果类型转换不当 可能导致数据丢失 4 5 4常量和变量 无论常量还是变量 都要先声明后使用 常量和变量在声明时 都可以在数据类型前加上访问修饰符 publicprotectedintemalprivate 4 5 4常量和变量 1 常量常量就是其值固定不变的量 常量的声明语法如下 访问修饰符 const数据类型常量名 常量表达式 例如 constfloatPI 3 17f 4 5 4常量和变量 2 变量1 变量的声明与初始化变量是在程序运行中可以改变值的量 C 声明变量的语法格式为 访问修饰符 变量类型变量名称 变量的类型可以是sbyte byte short ushort int uint long ulong char float double decimal bool string 枚举类型或引用类型之一 4 5 4常量和变量 2 变量的作用域C 中每个变量都有其可用的代码段范围 只有在一定的范围内才可以访问 这个范围称为作用域 作用域既可用于方法 也可用于变量 一个标识符的作用域是从声明该标识符的那个位置开始 4 5 4常量和变量 一般情况下 确定作用域有以下规则 局部变量仅存在于声明该变量的语句块和方法结束的封闭花括号之前的作用域内 在for while或类似语句中声明的局部变量仅存在于该循环体内 只要类在某个作用域内 其字段也在该作用域内 4 5 5运算符与表达式 表达式是由常量 变量 运算符 函数和括号等组成的有意义的式子 每个表达式都具有一个值 运算符是指定表达式中执行什么操作的符号 根据运算符的作用可将运算符分为多种类型 C 常用的运算符类型分为 赋值运算符算术运算符逻辑运算符等 4 5 5运算符与表达式 1 赋值运算符最常见的赋值运算符是 该运算符将右操作数的值存储到左操作数中 并将值作为结果返回 通常要求左操作数是一个变量 例如 intx 10 inty x 2 此外还有复合赋值运算符 等 4 5 5运算符与表达式 2 算术运算符算术运算符在运算过程中用来进行加 减 乘 除和取余等运算 如下示例列出了常用的算术运算操作 usingSystem namespacemyApplication classProgram publicstaticvoidMain string args inta 8 b 5 Console WriteLine 0 1 2 a b a b Console WriteLine 0 1 2 a b a b Console WriteLine 0 1 2 a b a b Console WriteLine 0 1 2 a b a b Console WriteLine 0 1 2 a b a b Console ReadKey 例4 8 算法运算符及赋值运算符示例 4 5 5运算符与表达式 3 条件运算符条件运算符是if else 结构的简化形式 使用此运算符能够使程序更简洁 直观地表达那些简单的if else 结构 条件运算符是唯一的三元运算符 因为它带有三个操作数 在编程过程中 使用该运算符可以计算一个条件 如果条件为真 就返回一个值 如果条件为假 则返回另一个值 其语法如下 condition ture value false value 4 5 5运算符与表达式 4 关系运算符关系运算用于两个操作数的比较 其返回值是布尔值 如表所示 usingSystem namespacemyApplication classProgram publicstaticvoidMain string args inta 8 b 5 Console WriteLine 0 1 2 a b a b Console WriteLine 0 1 2 a b a b Console WriteLine 0 1 2 a b a b Console WriteLine 0 isfloat 2 a b aisfloat Console ReadKey 例4 9 关系运算符示例 本示例的输出结果如下所示 8 5 Flase8 5 Ture8 5 Ture8isfloat Flase 4 5 5运算符与表达式 5 逻辑运算符 usingSystem namespacemyApplication classProgram publicstaticvoidMain string args inta 8 intb 5 if a10 a a b else a a b Console WriteLine a 0 a Console ReadKey 例4 10 逻辑运算符示例 本示例的输出结果如下所示 a 3 4 5 5运算符与表达式 6 运算符的优先级 4 5 6流程控制语句 控制语句用于控制程序的流程 以实现程序的各种结构和方法 控制语句由特定的关键字和语法结构组成 C 程序控制语句主要分为3类 选择语句循环语句跳转语句 4 5 6流程控制语句 1 选择语句选择语句又称为条件语句 分支语句 用于判断一个表达式的结果是真或是假 根据返回的结果判断执行哪个语句块 选择语句主要有 if else 语句switch语句 1 选择语句 1 if else 语句判断条件表达式是否成立 根据条件表达式成立与否来决定程序将要执行的语句 该语句的基本语法结构如下 if 条件表达式1 代码段1 elseif 条件表达式2 代码段2 else 代码段3 1 选择语句 2 switch语句switch语句用于对一个结果的多个分支进行判断 可以用来在多个可能的情况中选择一个条件 而不再需要用大量嵌套的if elseif else 语句 switch 条件表达式 case1 代码段1 break default 代码段n break 2 循环语句 循环语句用于执行某些重复性的操作 C 提供4个不同的循环语句 for语句foreach语句while语句dowhile语句 2 循环语句 1 for语句for循环执行语句 或语句块 直至指定的表达式求值为false 语句格式如下 for 初始值表达式 循环条件表达式 循环后的操作表达式 代码段 2 循环语句 2 foreach语句foreach循环可以迭代出集合中的每一项 但并不能修改集合中的任何一项 循环变量由类型和标识符声明 且表达式与集合相对应 循环变量代表循环正在为之运行的集合元素 foreach语法的格式如下 foreach 变量类型变量名in集合 代码段 2 循环语句 3 while语句当条件为真时 重复执行代码段 while语句的格式如下 while 条件表达式 代码段 条件表达式的结果为布尔量 如果循环体中只有一条语句 则可以省略花括号 2 循环语句 4 dowhile语句重复执行代码段 直到条件为假 dowhile语句的格式如下 do 代码段 while 条件表达式 条件表达式的结果为布尔量 2 循环语句 4 跳转语句跳转语句包括 break语句 continue语句 return语句和goto语句 goto语句可以将程序控制权直接转移到带有标号的语句 具有非常大的灵活性 增加了后期程序维护的难度 故不建议使用goto语句 4 跳转语句 break语句break语句一般用在循环语句或条件语句中 用于终止一条循环语句 使程序流程跳转到循环语句外的下一条语句 4 跳转语句 continue语句continue语句用于跳过循环体中剩余的语句 并重新执行下一次循环 即 跳过循环体中下面尚未执行的语句 结束本次循环 接着进行下一次是否执行循环的判定 continue语句与break语句的区别在于 continue并不是中断循环语句 而是中止当前迭代的循环 进入下一次的迭代 4 跳转语句 return语句return语句用于终止它所执行的方法 并将程序流程返回给调用方法 如果方法有返回类型 return语句必须返回这个相同类型的值 如果方法没有返回类型 应使用没有表达式的return语句 4 5 7异常处理 异常处理是一种操作系统提供的机制 用来优化程序的结构 提供更加健壮的程序执行环境 异常是指需要特殊处理的例外情况 如内存不够 磁盘读写出错 网络资源不可用 数据库无法访问等 异常处理使用try catch finally关键字来尝试处理可能失败的操作 一旦发生异常仍可按预定的方法进行后续处理 如已占用内存资源的释放等 try catch finally异常处理语句 try 指明在执行过程中需要监视抛出异常的代码块 Catch 处理所产生的任何异常 finally块 包含的通常是一些释放程序不再使用的对象所占用的存储资源的代码 捕捉和处理异常的机理是 当try子句中的代码产生异常时 按照catch子句的顺序查找异常类型 如果找到 则执行该catch子句中的异常处理语句 如果没有找到 则执行通用异常类型的catch子句中的异常处理语句 usingSystem namespacemyApplication classProgram publicstaticvoidMain string args inta b c b 10 c 0 try a b c 可能产生异常的代码块 catch Exceptione 对异常进行处理的代码块Console WriteLine 发生异常 0 e Message finally 最终必须执行的代码块Console WriteLine 释放资源 Console ReadKey 例4 11 异常处理示例 本示例的输出结果如下所示 发生异常 Attemptedtodividebyzero 释放资源 4 6C 面向对象编程 面向对象技术是一种以对象为基础 以事件驱动对象执行相应的消息处理函数的程序设计技术 它以数据为中心 将数据及相应操作封装在一起抽象成一种新的数据类型 即类 面向对象程序的控制由运行时各种事件的实际发生来触发 而不再由事件的预定顺序来决定 面向对象技术符合人们的思维习惯 有助于控制软件的复杂度 提高软件的生产效率 从而得到了广泛的应用 已经成为目前最为流行的软件开发方法之一 4 6 1类的定义 类是对具有相同特性和行为的事物的描述 类定义了的数据和行为 类可以被其他类继承 而继承是实现代码重用的重要手段 在C 中所有的内容都被封装在类中 因此类是C 的核心概念 类的定义格式如下 访问修饰符 class类名 类体 包括任意多个变量与方法 usingSystem namespacemyApplication classPerson 定义一个类 class是关键字 表示定义一个类 Person是类名 privatestringstrName 小王 声明类的数据成员 private表示私有数据成员privateintintAge 12 publicvoidDisplay 声明一个类的方法 用于显示姓名和年龄 Console WriteLine 姓名 0 年龄 1 strName intAge publicvoidSetName stringstrPersonName 声明一个类的方法 用于设置姓名 strName strPersonName publicvoidSetAge intintPersonAge 声明一个类的方法 用于设置年龄 intAge intPersonAge 例4 12 定义Person类 该类包含strName intAge两个私有数据成员 和Display SetName SetAge三个公有函数 方法 成员 4 6 2创建对象 对象即类的实例 类是具有相同属性和行为的对象的集合 类是对象的抽象 对象是类的实例 对象与类的关系如同特殊与一般的关系 如同变量与变量类型的关系 通过new关键字来创建对象 语法格式如下 类名实例名 new类名 参数列表 4 6 3类的成员 1 类成员的类型类的成员主要包括以下类型 局部变量字段方法属性事件索引指示器运算符重载构造函数和析构函数 4 6 3类的成员 2 类成员的访问修饰符访问修饰符用于指定类及其成员的可访问性 五种类成员访问修饰符 publicprivateprotectedinternalprotectedinternal 4 6 3类的成员 访问修饰符的作用范围 4 6 3类的成员 3 静态类与实例类类的成员分为静态成员和实例成员 当类声明时使用static修饰符 则表示声明的类为静态类 该类无需使用new关键字创建类的实例 其成员数据和方法就能够被外部调用 静态类所提供的数据成员和方法成员具有唯一性 就如同使用了全局变量 所以比较适合封装公用的成员 没有用static修饰符声明的类 称为实例类 4 6 4类的构造函数和析构函数 在建立类的对象时 需做一些初始化工作 例如对数据成员初始化 这些工作可以用构造函数来完成 构造函数是特殊的成员函数 每当用new创建类的对象时 系统会自动调用类的构造函数 因此 可以把初始化的工作放到构造函数中完成 构造函数的名称必须与类名相同 构造函数可以带参数 但没有返回值 构造函数在对象定义时被自动调用 若没有给类定义构造函数 则编译系统会自动生成一个默认的构造函数 构造函数可以被重载 但不可以被继承 构造函数的特性 4 6 4类的构造函数和析构函数 析构函数也是特殊的成员函数 主要用于释放类的实例 一般情况下 在C 应用程序中很少使用析构函数 但当应用程序封装窗口 文件和网络连接这类非托管资源时 应当使用析构函数释放这些资源 析构函数的名称与类名相同 但名称前面需加一个 符号 析构函数不能带任何参数 也没有返回值 当撤销对象时 CLR会自动调用析构函数 析构函数不能被继承 也不能被重载 析构函数的特性 usingSystem namespacemyApplication publicclassPerson publicintage publicstringname publicPerson intAge stringName 构造函数 age Age name Name Person 析构函数 Console Write 执行析构函数 Console ReadKey classProgram staticvoidMain Personp newPerson 18 XiaoWang System Console Write Name 0 Age 1 p name p age Console ReadKey 例4 13 构造函数和析构函数示例 本示例的输出结果如下所示 Name XiaoWang Age 18执行析构函数 4 6 5类的字段和属性 1 字段字段是指与对象或类相关联的变量 包括静态字段 实例字段和只读字段三种类型 用static修饰符声明的字段为静态字段 所有类实例共享一个静态字段的副本 没有用static修饰符声明的字段为实例字段 与对象中的变量相似 类的每个实例都包含实例字段的一个副本 用readonly修饰符声明的字段为只读字段 只读字段是特殊的实例字段 只能在字段声明中或构造函数中赋值 此外 用const修饰符限定的字段为常量 常量只能在声明中初始化 以后不能再被修改 usingSystem namespacemyApplication publicclassTest publicconstdoublePI Math PI const常量 必须赋初值publicintx 0 实例字段publicreadonlyinty 0 只读字段publicstaticintz 0 静态字段publicTest intx1 inty1 Test的构造函数 x x1 在构造函数允许修改实例字段y y1 在构造函数允许修改只读字段z 每创建一个对象都调用构造函数 用此语句可以记录对象的个数 publicvoidModify intx1 inty1 x x1 z y1 例4 14 字段使用的示例 例4 14 续 本示例的输出结果如下所示 x 20 y 15z 1 PI 3 14159265358979 classProgram staticvoidMain string args Testtest1 newTest 10 15 test1 PI是常量字段 不能被修改 test1 x 20 test1 y 30是只读字段 不能被修改 Console WriteLine x 0 y 1 test1 x test1 y Test类中的x和y都是实例字段 只有Test创建的实例能够访问 Console WriteLine z 0 PI 1 Test z Test PI Test类中的z和PI分别是静态类和常量 只能通过Test类访问 无法通过 其实例访问 Console ReadKey 4 6 5类的字段和属性 2 属性属性用于描述对象的特征或表示对象的状态 它提供对类或对象特性的访问 属性通过访问器来实现值的读取和修改 有两类访问器 set访问器和get访问器 set访问器用于给属性赋值 使用value设置属性的值 get访问器用于获取属性值 它通过return返回属性的值 若只有get访问器 表示是只读属性 如果只有set访问器 表示是只写属性 如果既有get访问器 又有set访问器 则表示具有读写属性 usingSystem namespacemyApplication publicclassPerson privatestringstrName 小王 strName是私有字段publicstringName 定义属性Name get returnstrName set strName value privateintintAge 12 intAge是私有字段publicintAge 定义属性Age get returnintAge set intAge value publicvoidDisplay 类的方法声明 显示姓名和年龄 Console WriteLine 姓名 0 年龄 1 Name Age 例4 15 定义一个描述个人情况的Person类 其中字段strName和intAge是私有字段 用于记录姓名和年龄 外部通过公有方法SetName和SetAge修改这两个私有字段 使用属性来描述姓名和年龄的读写 publicclassProgram publicstaticvoidMain string args Personperson1 newPerson person1 Name 小张 通过set方法修改变量strNameperson1 Age 18 通过set方法修改变量intAgeperson1 Display stringstr1 person1 Name 通过get方法得到变量strName的值intint1 person1 Age 通过get方法得到变量intAge的值Console WriteLine 姓名是 0 年龄是 1 str1 int1 Console ReadKey 例4 15 续 本示例的输出结果如下所示 姓名 小张 年龄 18姓名是小张 年龄是18 4 6 6类的方法 方法也可称为函数 是有特定名称的一组语句 每个方法都具有一个方法名和一个方法体 方法体中包含实际的执行语句 这些语句在该方法被调用时执行 在类中 方法是表现类或对象行为的成员函数 方法名是函数的标识符 它应该反映该方法的整体目标 并且具有一定的含义 方法是一种基本的且功能强大的编程机制 所有的方法都必须定义在类中 4 6 6类的方法 1 方法的声明格式如下 属性方法修饰符返回值类型方法名 形参列表 方法体 返回类型可以是任何合法的C 数据类型 也可以为空 即无返回值 形参列表的格式为 形参数据类型形参1 形参数据类型形参2 形参的个数没有限制 可以有0到任意多个 4 6 6类的方法 2 方法的参数C 语言的方法可以使用如下四种类型的参数 值参数 不含任何修饰符 引用参数 以ref修饰符声明 输出参数 以out修饰符声明 数组参数 以params修饰符声明 1 值参数 未用任何修饰符声明的参数称为值参数 值参数在调用该参数所属的方法成员时创建 并使用调用时给定的实参值进行初始化 当从该方法返回时值参数被销毁 对值参数的修改不会影响到原自变量 2 引用参数 用ref修饰符声明的参数为引用参数 引用参数是调用者提供的自变量的别名 引用参数直接引用原自变量 故对引用参数的修改将直接影响相应原自变量的值 在方法被调用时 引用参数必须被赋予初值 3 输出参数 用out修饰符定义的参数称为输出参数 如果需要函数返回多个值 那么就需要使用输出参数 输出参数与引用参数类似 它并不定义自己的变量 而是直接引用原自变量 这样当在函数内为输出参数赋值时 就相当于给原自变量斌值 4 数组参数 用params修饰符定义的参数称为数组参数 如果形参列表中使用数组参数 那么它必须是参数表中最后一个参数 数组参数只允许是一维数组 usingSystem namespacemyApplication publicclassProgram publicstaticintAdd intx refinty outintz int arr for inti 0 i arr Length i Console WriteLine 数组参数 0 的值 1 i ToString arr i ToString z x y y x y return x y publicstaticvoidMain string args intx 10 y 6 z 0 int arr 1 2 3 4 5 Console WriteLine Add方法的返回值 0 Add x refy outz arr Console WriteLine y 0 z 1 y z Console ReadKey 例4 16 四类参数的使用示例 本示例的输出结果如下所示 数据参数 0 的值 1数据参数 1 的值 2数据参数 2 的值 3数据参数 3 的值 4数据参数 4 的值 5Add方法的返回值 40y 4 z 16 4 6 6类的方法 3 静态方法和实例方法用static修饰符声明的方法称为静态方法 没有用static修饰符声明的方法称为实例方法 静态方法不对特定实例进行操作 不与实例相关联 它属于类 只能访问类中的静态成员 实例方法对类的某个给定的实例进行操作 而且可以用this来访问该实例 它属于对象 可以访问类中的任何成员 usingSystem namespacemyApplication classTest staticintx 静态数据成员inty 非静态数据成员publicstaticvoidA 静态方法A x 1 正确 在静态方法中访问静态成员 y 2 错误 在静态方法中访问非静态成员 publicvoidB x 1 正确 在实例方法中访问静态成员y 2 正确 在实例方法中访问非静态成员 classProgram publicstaticvoidMain string args Testtest1 newTest Test A 使用类名调用静态方法test1 B 使用实例调用实例方法 例4 17 静态方法和实例方法的示例 4 6 6类的方法 4 方法的重载方法重载指一个类中可以有两个或两个以上的方法使用相同的名称 为了区分这些同名方法 要求方法必须有不同的参数 可以是参数个数的不同 也可以是参数类型不同 方法重载体现了C 对多态性的支持 usingSystem namespacem

温馨提示

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

评论

0/150

提交评论