面向对象的编程基础.ppt_第1页
面向对象的编程基础.ppt_第2页
面向对象的编程基础.ppt_第3页
面向对象的编程基础.ppt_第4页
面向对象的编程基础.ppt_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

第3章面向对象的编程基础 3 1面向对象的程序设计3 2常用类操作和数据处理 本章教学目的学习C 面向对象基础知识 以及常用的类 本章教学要求 1 掌握类 构造函数 方法 属性 事件的概念与用法 2 掌握Convert类 String类的用法 3 了解StringBuilder类 Math类的用法 3 1面向对象的程序设计 类与对象 类 一组具有相同数据结构和相同操作的对象的集合 例如 汽车 对象 实例 类的实例化 例如 卡车 要使用对象 必须先定义类 然后再创建对象 3 1 1类的组织 1 类的声明用class定义类 声明类的形式为 附加声明 访问修饰符 class类名称 基类 接口序列 字段声明 构造函数 方法 事件 注意 中的内容可省或任选其一 当两者都有时 先基类后接口 3 1 1类的组织 续 publicclassChild privateintage privatestringname 不带参数的构造函数publicChild name none 带参数的构造函数publicChild stringname intage 如果不指明 则默认为private 3 1 1类的组织 续 this name name this age age 输出方法publicvoidPrintChild Console WriteLine 0 1 yearsold name age publicclassProgram 3 1 1类的组织 续 publicstaticvoidMain 使用new关键字创建对象 new后是调用的构造函数Childchild1 newChild ZhangSan 11 Childchild2 newChild LiSi 10 Childchild3 newChild 显示结果Console Write Child 1 child1 PrintChild Console Write Child 2 child2 PrintChild Console Write Child 3 child3 PrintChild 3 1 1类的组织 续 Console ReadLine 2 对象的生存周期对象在建立时分配了内存 创建对象实际上作了两个方面的工作 1 使用new保留字要求系统分配内存 2 使用构造函数初始化数据 3 1 1类的组织 续 C 也允许在程序中定义析构函数 定义方法与C 类似 但是C 不允许在程序中调用析构函数 而只能由垃圾回收器调用 我们编写程序时不需要定义析构函数 而是由系统自动定义 自动调用 3 1 1类的组织 续 注意 可以调用安全的Dispose方法销毁对象 在对性能要求比较高的场合 调用Dispose方法直接销毁对象还是很有用的 垃圾回收机制是在它认为适当的时候自动回收不再使用的内存的 即检测没有被引用的对象 然后销毁之 销毁对象也是做了两个方面的工作 1 释放占用的内存 2 将分配给对象的内存归还给堆 Heap 3 1 1类的组织 续 3字段和局部变量字段 指声明为类一级的对象或值类型的变量 局部变量 指在方法 事件以及构造函数内声明的变量 publicclassProgram publicstaticintj 20 字段publicstaticvoidMain 3 1 1类的组织 续 intj 30 局部变量Console WriteLine j 输出结果 30Console WriteLine Program j 输出结果 20Console ReadLine 当字段和局部变量名相同时 如果要引用静态字段 可以使用下面的形式 类名 字段名如果是实例字段 则使用下面的形式 this 字段名这里的this指当前实例 当然 如果没有出现字段和局部变量名重名的情况 引用字段的形式和引用局部变量的形式相同 3 1 1类的组织 续 4 静态成员与实例成员类的成员类的成员包括字段 属性 构造函数 方法 事件 索引 嵌套类 类的成员分静态成员和实例成员 静态成员在内存中只有一份 静态成员要等到应用程序结束时才会退出内存 把只有创建了类的实例才能够使用的成员叫实例成员 3 1 1类的组织 续 5 访问修饰符C 中有以下成员访问修饰符 Public 常用 任何外部的类都可以不受限制的存取这个类的方法和数据成员 private 常用 类中的所有方法和数据成员只能在此类中使用 外部无法存取 默认 Protected除了让本身的类可以使用之外 任何继承自此类的子类都可以存取 3 1 1类的组织 续 Internal在当前项目中都可以存取 该访问权限一般用于基于组件的开发 因为它可以使组件以私有方式工作 而该项目外的其它代码无法访问 Protectedinternal只限于当前项目 或者从该项目的类继承的类才可以存取 Partial局部类型 类的定义和实现可以分布在多个文件中 但都要使用partial标注 基类只需要声明一次 若多次声明则必须完全一致 3 1 2构造函数 作用 构造函数是一个特殊的方法 用于在建立对象时进行初始化的动作 好处 确保每一个对象在被使用之前都适当地进行了初始化的动作 构造函数特点 1 每个类至少有一个构造函数 若程序代码中没有构造函数则系统会自动提供一个默认的构造函数 2 一个构造函数总是和它的类名相同 3 构造函数不包含任何返回值 4 构造函数总是public的 一般在构造函数中作初始化工作 对于执行过程用时比较长的程序代码 最好不要放在构造函数中 3 1 2构造函数 C 支持两种构造函数 实例构造函数实现初始化类实例所需操作静态构造函数类第一次加载时实现初始化类实例所需的操作所有值类型都隐式声明一个称为默认构造函数 defaultconstructor 的公共无参数实例构造函数 默认构造函数返回一个零初始化实例 它就是该值类型的默认值 defaultvalue 构造函数 续 对于所有simple types 默认值是将其所有位都置零的位模式所形成的值 对于sbyte byte short ushort int uint long和ulong 默认值为0 对于char 默认值为 x0000 对于float 默认值为0 0f 对于double 默认值为0 0d 对于decimal 默认值为0 0m 对于bool 默认值为false 对于enum typeE 默认值为0 对于struct type 默认值是通过将所有值类型字段设置为它们的默认值 将所有引用类型字段设置为null而产生的值 3 1 2构造函数 续 1 默认构造函数 1 如果在类中不定义构造函数 系统会提供一个默认的构造函数 2 默认构造函数没有参数 3 默认构造函数自动将非静态成员初始化为 数值型 如int double等 初始化为0 bool类型 初始化为false 引用类型 初始化为null 4 如果自己定义了类的构造函数 则所有初始化工作由编程者自己完成 3 1 2构造函数 续 2 静态构造函数用于初始化任何静态数据 或用于执行仅需执行一次的特定操作 特点 1 静态构造函数既没有访问修饰符 也没有参数 2 在创建第一个实例或引用任何静态成员之前 将自动调用静态构造函数来初始化类 3 无法直接调用静态构造函数 雅虎面试题目 Question40 单选 classClass1 publicstaticintCount 0 staticClass1 Count publicClass1 Count Class1o1 newClass1 Class1o2 newClass1 请问 Class1 Count的值是多少 a 1b 2c 3d 4答案 c 3 1 2构造函数 续 3 重载构造函数有时候可能会遇到这样的情况 在一个类中的多个方法中都要用到某一个数据成员 而该成员值必须从其他类中传递过来 这时 无参数的构造函数就不能胜任了 解决这个问题最好的办法就是 重载 Overloading 构造函数 3 1 2构造函数 续 usingSystem usingSystem Collections Generic usingSystem Text namespaceOverloadingExample classProgram publicProgram Console WriteLine null 3 1 2构造函数 续 publicProgram stringstr Console WriteLine str staticvoidMain Programaa newProgram Programbb newProgram Howareyou Console ReadLine 3 1 3方法 方法 Method 是一组程序代码的集合 每个方法都有一个方法名 便于识别和让其他方法调用 1 方法的定义与使用 1 方法必须放在某个类中 2 定义方法的语法形式为 访问修饰符返回值类型方法名称 参数序列 语句序列 3 1 3方法 续 定义方法时 需要注意以下几点 方法名不能和变量 常数或者任何声明在类中其它的成员相同 方法可以有参数 也可以没有参数 但是不论是否有参数 小括号都是必需的 如果参数序列中的参数有多个 则以逗号分开 结束某个方法的执行 可以使用return语句 程序遇到return语句后 会将执行流程交还给调用此方法的程序代码段 此外 还可以用return语句返回一个值 3 1 3方法 续 如果声明一个非void类型的方法 则方法中必须至少有一个return语句 usingSystem usingSystem Collections Generic usingSystem Text namespaceMethodExample classProgram publicintMyMethod 3 1 3方法 续 Console WriteLine thisisMyMethod inti 10 returni staticvoidMain Programmethod newProgram intj 5 j method MyMethod 3 1 3方法 续 Console WriteLine thevalueis 0 j Console ReadLine 2 方法中的参数传递1 传递值类型的参数值类型参数的格式为 参数类型参数名 3 1 3方法 续 usingSystem usingSystem Collections Generic usingSystem Text namespaceValueTransferExample classProgram publicstaticvoidAddOne inta a 3 1 3方法 续 staticvoidMain inta 3 Console WriteLine 调用AddOne之前 a 0 a AddOne a Console WriteLine 调用AddOne之后 a 0 a Console ReadLine 3 1 3方法 续 2 传递引用类型的参数引用类型参数的格式为 ref参数类型参数名usingSystem usingSystem Collections Generic usingSystem Text namespaceReferenceTransferExample classProgram publicstaticvoidAddOne refinta 3 1 3方法 续 a staticvoidMain intx 3 Console WriteLine 调用AddOne之前 x 0 x AddOne refx Console WriteLine 调用AddOne之后 x 0 x Console ReadLine 3 1 3方法 续 3 输出多个引用类型的参数输出引用类型参数的格式为 out参数类型参数名usingSystem usingSystem Collections Generic usingSystem Text namespaceReferenceOutExample classProgram publicstaticvoidMyMethod outinta outintb 3 1 3方法 续 a 5 b 6 staticvoidMain intx y MyMethod outx outy Console WriteLine 调用MyMethod之后 x 0 y 1 x y Console ReadLine Ref参数传递与Out参数传递异同点 相同点 都是传递引用类型的参数 编译器处理时没有区别不同点 Ref参数使用前必须要初始化Out参数使用前不必初始化注意 PublicAddOne refintx PublicAddOne outintx 上面这两个方法 不是重载方法 3 1 3方法 续 4 传递个数不确定的参数需要传递的参数个数不确定时 可以采用params关键字 其后一般跟一个数组 usingSystem usingSystem Collections Generic usingSystem Text namespaceUncertaintyTransferExample classProgram publicstaticfloatAverage paramslong v longtotal i 3 1 3方法 续 for i 0 total 0 i v Length i total v i return float total v Length staticvoidMain floatx Average 1 2 3 5 Console WriteLine 1 2 3 5的平均值为 0 x x Average 4 5 6 7 8 Console WriteLine 4 5 6 7 8的平均值为 0 x Console ReadLine 3 1 3方法 续 3 方法重载方法重载是指具有相同的方法名 但参数类型或参数个数不完全相同的多个方法可以同时出现在一个类中 usingSystem usingSystem Collections Generic usingSystem Text namespaceMethodOverloadingExample classProgram 3 1 3方法 续 publicstaticintAdd inti intj returni j publicstaticstringAdd strings1 strings2 returns1 s2 publicstaticlongAdd longx returnx 5 3 1 3方法 续 staticvoidMain Console WriteLine Add 1 2 Console WriteLine Add 1 2 Console WriteLine Add 10 按回车键结束Console ReadLine 3 1 4属性 作用 可以限制外部对类中成员变量的存取权限 1 属性的定义get 用来读取数据成员的值 set 用来设置数据成员的值 usingSystem usingSystem Collections Generic usingSystem Text namespacePropertyExample publicclassMyClass 3 1 4属性 续 privateintnumber 0 publicintMyNumber get returnnumber set if value 0 3 1 4属性 续 number value value是关键字 其值由编译器自动生成 publicclassProgram publicstaticvoidMain MyClassme newMyClass 3 1 4属性 续 Console WriteLine me MyNumber me MyNumber 5 Console WriteLine me MyNumber Console ReadLine 3 1 4属性 续 2 属性与方法的区别属性和方法的区别主要有 1 属性不必使用括号 但方法一定要使用括号 2 属性不能指定参数 方法可以指定参数 3 属性不能使用void类型 方法则可以使用void类型 3 1 5事件 事件 是指当对象发生某些事情时 向其他对象提供通知的一种方法 两种角色 1 一个是事件发送方2 一个是事件接收方用途 事件最常见的用途是用于图形用户界面 3 2常用类操作和数据处理 主要介绍类 ConvertStringStringBuilderDateTime TimeSpanMath 3 2 1Convert类 Convert类位于System命名空间下 用于将一个值类型转换为另一个值类型 Convert ToInt32 方法若为中间数 则返回二者数中的偶数若为非中间数 舍入最接近的有符号数例如 intd 23 5D d2 22 3 inti Convert ToInt32 d 24intj Convert ToInt32 d2 22Convert ToBoolean 方法非零为true 否则为false例3 11 3 2 2String类 续 字符串类分为两种 String类和StringBuilder类String类 string stringmyString sometext myString andabitmore 其实际操作并不是在原来myString所占内存空间的后面直接附加上第二个字串 而是返回一个新String实例 即重新为新字符串分配内存空间 3 2 2String类 续 ToString 方法String Empty表示空字符串String类的表示方法 stringstr C test first cs stringstr C test first cs 取字符串中的某个字符的方法 stringmyString sometext charchFirst myString 2 结果为m 3 2 2String类 续 1 字符串的表示格式可以使用Format方法将字符串表示为规定格式 规定格式的一般形式为 N M 格式码 其中 表示其中的内容为可选项 N 从零开始的整数 表示第几个参数 M 可选整数 表示最小宽度 若该参数的长度小于M 就用空格填充 如果M为负 则左对齐 如果M为正 则右对齐 如果未指定M 则默认为零 常用字符串格式码 C 将数字按金额形式输出D 输出整数 限整型数 F 小数点后位数固定N 数字形式输出P 百分比形式输出E 科学记数法形式输出注意 上边格式码大小写均可 3 2 2String类 续 常用格式举例 1 在ToString中使用d格式 inti 12345 i ToString d 表示将i按照实际整数宽度转换为字符串stringstr i ToString d Console WriteLine str 结果12345 i ToString d8 表示将i转换为字符串 宽度为8位 不够8位左边用0填充stringstr1 i ToString d8 Console WriteLine str1 结果00012345 3 2 2String类 续 2 在string Format中使用d格式 inti 123 doublej 123 45 0 7 d 表示第0个参数 宽度7位 不够7位左边用空格填充 d表示十进制整数strings1 string Format thevalueis 0 7 d i Console WriteLine s1 结果thevalueis123 0 7 f3 表示第0个参数 总宽度7位 其中小数部分占3位 不够7位左边填空格 f表示浮点数strings2 string Format thevalueis 0 7 f3 j Console WriteLine s2 结果thevalueis123 450 3 2 2String类 续 3 在ToString中使用f格式 doublei 12345 6789 f2表示浮点数小数部分为2位 多余部分四舍五入 不够2位时右边补零stringstr i ToString f2 Console WriteLine str 结果12345 68stringstr1 i ToString f6 Console WriteLine str1 结果12345 678900 3 2 2String类 续 4 在ToString中使用n格式 doublei 12345 6789 n表示整数部分从小数点向左每3位用逗号分隔开 小数部分2位 多余部分四舍五入stringstr i ToString n Console WriteLine str 结果12 345 68 n4表示整数部分从小数点向左每3位用逗号分隔开 小数部分4位 多余部分四舍五入stringstr1 i ToString n4 Console WriteLine str1 结果12 345 6789 3 2 2String类 续 5 在ToString中使用p格式 doublei 0 126 p表示百分数形式strings string Format thevalueis 0 p i Console WriteLine s 结果thevalueis12 60 stringstr i ToString p Console WriteLine str 结果12 60 3 2 2String类 续 6 日期与时间的格式化表示 DateTimedt newDateTime 2006 5 25 yy表示年占两位 M表示月占1位 超出1位按实际位数 d表示日占1位 超出1位按实际位数stringstr dt ToString yy M d Console WriteLine str 结果06 5 25 yyyy表示年占4位 M表示月占1位 超出1位按实际位数 其他按原字符输出stringstr1 dt ToString yyyy年M月 Console WriteLine str1 结果2006年5月 3 2 2String类 续 7 指定位数和对齐方式 inti 123 doublej 123 45 0 7 表示第0个参数左对齐 占7位 不够7位右边补空格 1 7 表示第1个参数右对齐 占7位 不够7位左边补空格 strings string Format i 0 7 j 1 7 i j Console WriteLine s 结果i 123 j 123 45 3 2 2String类 续 8 使用占位符表示 inti 00012 stringstr string Format 0 00 i Console WriteLine str 结果12 00i 0 str string Format 0 i Console WriteLine str 结果什么都不输出 3 2 2String类 续 2 常用字符串操作方法举例说明常用的一些方法 生成字符串stringstr1 thisisastring stringstr2 str1 stringstr3 newstring a 4 Console WriteLine str3 结果为aaaa查找指定字符串在字符串中出现的位置IndexOf stringstr LastIndexOf stringstr 3 2 2String类 续 例如 Console WriteLine str1 IndexOf is 结果为2 注意序号从0开始 Console WriteLine str1 LastIndexOf is 结果为5删除指定数量的字符Remove intstartIndex intcount 例如 stringstr1 thisisastring Console WriteLine str1 Remove 1 2 结果为tsisastring 3 2 2String类 续 字符串替换Replace stringoldStr stringnewStr 例如 stringstr1 thisisastring Console WriteLine str1 Replace is xy 结果为thxyxyastring分离字符串Split char separator 例如 stringstr1 thisisastring 3 2 2String类 续 string str str1 Split for inti 0 i str Length i Console WriteLine str i 输出结果 thisisastring 3 2 2String类 续 把字符串中的字符复制到一个字符数组中利用ToCharArray可以将字符串转换为字符数组 字符串中字母的大小写转换利用ToUpper可以将字符串的所有英文字母转换为大写 利用ToLower可以将字符串的所有英文字母转换为小写 从字符串开头或结尾删除指定的字符利用TrimStart删除字符串首部空格 利用TrimEnd删除字符串尾部空格 利用Trim删除字符串首部和尾部空格 3 2 2String类 续 例如 strings1 thisisabook strings2 thatisapen strings3 isapen Console WriteLine s1 TrimStart 删除首部空格Console WriteLine s2 TrimEnd 删除尾部空格Console WriteLine s3 Trim 删除首部和尾部空格填充字符到字符串中使总长度等于指定长度PadLeft 总长度 字符 3 2 2String类 续 PadRight 总长度 字符 例如 stringstr a stringstr1 str PadLeft 5 e Console WriteLine str1 结果为eeeeastringstr2 str PadRight 5 e Console WriteLine str2 结果为aeeee 3 2 2String类 续 截取字符串Substring intstartIndex intcount 截取字符串从startIndex位开始 截取长度为count的字符串例如 stringstr abc123 stringss str Substring 1 4 Console WriteLine ss bc12字符串比较Equals String Compare方法 3 2 3StringBuilder类 StringBuilder类位于System Text名称空间下 使用StringBuilder类每次重新生成新字符串时不是再生成一个新实例 而是直接在原来字符串占用的内存空间上进行处理 而且它可以动态的分配占用的内存空间大小 因此 在字符串处理操作比较多的情况下 使用StringBuilder类可以大大提高系统的性能 3 2 3StringBuilder类 常用方法Append 追加字符串AppendFormat 追加格式化字符串Remove intstartIndex intlength 从StartIndex位置开始移除长度为length的字符串ToString 举例 StringBuilderbuilder newStringBuilder builder Append abc123 builder AppendFormat 0 456 builder Remove 1 2 builder ToString a123456 3 2 4DateTime类和TimeSpan类 DateTime类可以表示范围在0001年1月1日午夜12 00 00到9999年12月31日晚上11 59 59之间的日期和时间 最小时间单位等于100毫微秒 TimeSpan类可以表示一个时间间隔 其范围可以在Int64 MinValue到Int64 MaxValue之间 例如 usingSystem usingSystem Collections Generic usingSystem Text 3 2 4DateTime类和TimeSpan类 续 namespaceDataTimeExample classProgram publicstaticvoidMain DateTimedt1 newSystem DateTime 2003 Year12 Month31 Day22 Hour35 Minute 3 2 4DateTime类和TimeSpan类 续 5 Second15 Millisecond DateTimedt2 newDateTime 2002 7 05 Console WriteLine 0 F 1 dt1 dt2 dt1 DateTime Now inti dt1 Day 当月第几天intj dt1 Month 月intk dt1 Year 年Console WriteLine 0 1 2 3 dt1 i j k 3 2 4DateTime类和TimeSpan类 续 DateTimet1 dt1 Date 日期部分k dt1 Hour 小时Console WriteLine 0 1 dt1 k TimeSpants1 dt1 TimeOfDay 当天的时间TimeSpants2 dt1 dt2 i ts2 Days Console WriteLine 0 1 2 ts1 ts2 i strings1 dt1 ToLongDateString strings2 dt1 ToShortDateString strings3 string Format 0 yyyy MM dd dt1 注意 M为月 m为分钟 3 2 4DateTime类和TimeSpan类 续 Console WriteLine 0 1 2 3 dt1 s1 s2 s3 Console ReadLine 在浏览网页时 我们经常见到显示当前日期 时间 星期的信息 下面用控制台应用程序说明完成这个功能的方法 3 2 4DateTime类和TimeSpan类 续 usingSystem usingSystem Collections Generic usingSystem Text namespaceShowDataTimeExample classProgram publicstaticvoidMain string weekDays 星期日 星期一 星期二 星期三 星期四 星期五 星期六 3 2 4DateTime类和TimeSpan类 续 DateTimenow DateTime Now stringstr string Format 0 现在是yyyy年M月d日 H点m分 1 now weekDays int now DayOfWeek Console WriteLine str DateTimestart newDateTime 2004 1 1 TimeSpantimes now start Console WriteLine 从 0 yyyy年M月d日 起到现在已经过了 1 天 start times Days Console ReadLine DateTime类常用方法和属性 静态方法和属性DateTime NowDateTime TodayDateTime Compare DateTimedt1 DateTimedt2 DateTime Parse stringstr 实例方法和属性 假设dt为Date

温馨提示

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

评论

0/150

提交评论