已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章面向对象程序设计基础,4.1抽象与封装,“这是熊猫,你看它有两个圆圆的黑眼圈,穿一身黑白相间的衣服,竹子是它的美食”。在程序员的眼里,母亲这段话描述的就是对象熊猫。“圆圆的黑眼圈,穿一身黑白相间的衣服”就是对象的属性,它描述对象的特征。“竹子是它的美食”实际上隐含了“熊猫吃竹子”,它是对象的方法,体现对象的行为,即熊猫能够吃东西。对象是现实世界中的一个实体,类是对一组具有共同属性特征和行为特征的对象的抽象。类与对象之间的关系就是抽象与具体的关系。对象是类的实例。,4.1抽象与封装,封装就是将数据的表现方式和对数据的操作细节隐藏起来,用户可以通过接口对数据进行操作,而不必要知道数据是如何表示的,怎么对数据操作的这些细节封装是面向对象的基本特征之一变速箱变速、汽车驱动、汽车转向等原理都被封装在汽车内部了,提供给驾驶员的只是一个接口。驾驶员只需要踩下油门、转动方向盘就可以上路了我们不必要知道录音机、MP3播放器、电视机遥控器等内部细节,只需要知道按下哪个键可以播放、停止即可,4.2类,4.2.1定义类类的定义形式:类修饰符class类名类体类修饰符包括new、public、protected、internal、private、abstract和sealed类体用于定义类的成员,包括数据成员和成员函数。【例4-1】定义复数类P70,4.2.2类的成员,类成员包括成员函数和数据成员两类。包含可执行代码的成员统称为该类的成员函数。类的成员函数包括:方法、属性、事件、索引器、运算符和构造函数。类的数据成员包含类要处理的数据,可以是常量和字段。,4.3对象,4.3.1创建对象使用new运算符,可以创建对象,即类的实例。对象是一个引用类型的变量。对象的创建形式:类名对象名=new类名(参数);Goodscloth=newGoods(10);使用new运算符创建对象,并调用类的构造函数完成对象的初始化工作。也可以分两步创建对象:Goodscloth;cloth=newGoods(10);,4.3.1创建对象,构造函数是一类特殊的成员函数,它主要用于为对象分配空间,完成初始化工作。其格式为:访问修饰符类名(形参列表)函数体publicGoods(ints)SNO=s;count+;构造函数是一类特殊的成员函数,其特殊性表现在:构造函数的名字必须与类名相同;构造函数可以带参数,用于为类的数据成员赋初值;构造函数没有返回值,因此函数体内不能有return语句;构造函数在创建对象时被自动调用,不需要在程序中显式调用;如果没有给类定义构造函数,则编译系统会自动生成一个默认构造函数:publiccon():base()构造函数可以被重载,但不可以被继承。【例4-2】定义Person类P72,4.3.2销毁对象,通常使用类的析构函数完成销毁对象的任务。析构函数也是特殊的成员函数,其格式为:类名()函数体Person()析构函数的特殊性表现在:析构函数的名字与类名相同,但它前面加一个“”符号;析构函数不能够带参数,也没有返回值;当撤销对象时,自动调用析构函数;析构函数不能被继承,也不能被重载。【例4-3】使用构造函数和析构函数P74,4.3.3使用对象,对象遵循先创建后使用的原则。先使用new运算符创建对象,然后使用“.”运算符访问对象中的成员。访问形式为:对象名.数据成员对象.成员函数Coursecomputer=newCourse(123,面向对象程序设计,4);stringresult=computer.Display();,4.4字段与属性,4.4.1字段字段表示与对象或类相关联的变量。1实例字段没用static修饰符声明的字段为实例字段。2静态字段用static修饰符声明的字段为静态字段。在内存中,只存在一个静态字段的拷贝。3只读字段用readonly修饰符声明的字段为只读字段。只读字段只能在字段声明或构造函数中被赋值,在其它地方都不能改变只读字段的值。【例4-4】使用字段P76,4.4.2属性,属性一般用来刻画对象的特征或表示对象的状态,它提供对类或对象性质的访问。1.定义属性访问修饰符数据类型属性名getget访问器代码块setset访问器代码块get和set关键字用于定义访问器。访问器是一种特殊的方法,专门用于访问属性值2.访问属性获取属性值使用get访问器。它通过return语句返回属性的值;给属性赋值使用set访问器,它使用value关键字设置属性的值。【例4-5】使用属性P77,4.4.2属性,3.自动实现的属性当属性的访问器中不需要程序逻辑时,可以使用自动实现的属性。语法格式为:访问修饰符数据类型属性名get;set;其中,get和set访问器没有代码块。classBookprivatestringbookName;/书名publicstringBookNameget;set;如果要创建只读或只写属性,只要在set或get关键字前添加private修饰符classBookprivatelongisbn;publiclongIsbnget;privateset;,4.5方法,4.5.1方法的声明类的成员函数也称为方法。方法声明的具体格式:方法修饰符返回类型方法名(形参列表)方法体方法修饰符包括:new、public、protected、internal、private、static、virtual、sealed、override、abstract和extern。【例4-6】计算圆的面积与周长P80,4.5.2方法的参数,1.值参数未用任何修饰符声明的参数为值参数。值参数在调用该参数所属的成员函数(方法、实例构造函数、访问器或运算符)时创建,并在调用时,用给定的实参值初始化。当从该函数返回时值参数被销毁。对值参数的修改不会影响到实参。值参数是通过复制实参的值来初始化的。【例4-7】在冒泡法排序中使用值参数P81,4.5.2方法的参数,2.引用参数用ref修饰符声明的参数为引用参数。由于引用参数为实参的一个引用,所以在方法中对引用参数的任何更改都会反映给实参,即实参与引用参数同时发生变化。【例4-8】在冒泡法排序中使用引用参数P83,4.5.2方法的参数,3.输出参数用out修饰符声明的参数称为输出参数。如果希望函数返回多个值,可以使用输出参数。输出参数与引用参数类似,参数也是通过引用来传递的,这样当在函数内为输出参数赋值时,就相当于给实参赋值。,4.5.2方法的参数,4.参数数组用params修饰符声明的变量称为参数数组,它允许向函数传递个数变化的参数。调用方可以传递一个属同一类型的数组变量,或任意多个与该数组的元素属同一类型的自变量。除了允许在调用中使用可变数量的参数,参数数组与同一类型的值参数完全等效。【例4-9】在冒泡法排序中使用参数数组P84,4.5.3this关键字,this关键字引用类的当前实例,类成员通过它可以知道自己属于哪一个实例。this关键字是一个隐含引用,它隐含于每个类的成员函数中,它引用该成员函数所属的对象。this关键字可用于从构造函数、类的方法和访问器中访问成员。this关键字有以下用途:(1)在成员函数内部引用被具有相似名称的局部变量隐藏的成员publicCircle(intx,inty)this.x=x;/用this引用数据成员xthis.y=y;/用this引用数据成员y(2)将对象作为参数传递到其他方法CalcTax(this);(3)声明索引器。,4.5.4索引器,索引器允许类或结构的实例像数组那样被访问。索引器是一类特殊的成员,它的定义方式与属性类似,只不过用this代替了属性名。语法格式:访问修饰符数据类型this索引getget访问器代码块setset访问器代码块【例4-10】使用索引器P87,4.5.5方法重载,方法重载允许一个类中有同名的方法存在为了区分这些同名方法,要求方法有不同的参数。要么参数个数不同,要么参数类型不同。【例4-11】利用重载方法比较两个不同类型的值P88,4.6静态类与静态成员,4.6.1静态类使用static修饰符声明的类为静态类。静态类只能包含静态成员,不能包含实例成员。不能使用new运算符生成静态类的实例。定义静态类的语法格式:staticclass类名类体【例4-12】数制转换P90,4.6.2静态成员,用static修饰符声明的成员称为静态成员,不用static修饰符声明的成员,称为实例成员。静态成员属于类,为这个类的所有实例所共享,实例成员仅被类的实例所拥有。静态成员包括静态字段、静态方法、静态属性和静态构造函数。静态成员除了可以出现在静态类中以外,还可以出现在非静态类中。但实例成员决不允许出现在静态类中由于静态成员不与实例相关联,因此访问静态成员要用“类名.成员名”的格式来访问。【例4-13】包含静态成员和实例成员的Book类P91,4.7C#的封装机制,封装强调将数据和操作封装在类中,形成一个黑盒子。类外部只能通过接口访问类中的数据,保护它不被意外破坏,4.7.1使用传统的读写方法进行封装,在程序中,可以使用传统的读写方法封装私有数据。通常先定义私有字段,然后定义一个读私有字段的方法和一个修改字段的方法。如果想访问类中封装的私有数据,只能通过读写方法完成,这样可以保证类中封装数据的完整性【例4-14】使用读写方法封装书的ISBNP93,4.7.2使用属性进行封装,属性使用get和set访问器访问和修改属性值。虽然它与使用传统的读写方法封装私有数据类似,但属性给我们提供了便捷的访问方式。我们不需直接调用get和set访问器,访问的语法与访问变量一样。,4.8分部类,通过使用分部类可以将类或结构的定义和实现分开放在多个文件中。使用partial关键字声明类或结构,就可以将类的一部分放在一个文件中,而将另一部分放在另一个文件中。【例4-15】使用分部类P94,4.9对象初始化器与匿名类型,4.9.1对象初始化器在通常情况下,我们必须使用构造函数初始化对象。有了对象初始化器以后,我们就可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。【例4-16】使用对象初始化器P96,4.9.2匿名类型,如果我们创建的对象比较简单,仅包含有限的数据,并不包含方法。可以考虑使用匿名类型。匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类varbook1=newBookName=面向对象程序设计,Price=23;可以使用“对象名.属性名”访问其属性:Console.WriteLine(0书的价格为:1元,book1.BookName,book1.Price);在LINQ中,匿名类型比较常见。,4.10综合案例毕业设计管理系统的实体类,在毕业设计管理系统中,需要保存大量数据。这些数据被保存在数据库中,这就需要使用实体类来承载这些数据,以便程序能够处理这些数据。一般情况下,每张数据表对应一个实体类。1.Person类在毕业设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【549】艺术疗法的概述
- 广东省深圳市南山区外国语学校2025-2026学年九年级(上)期末化学试卷(含答案)
- 12月固定收益月报:12月债市能迎来“顺风局”吗
- 飞机部件介绍
- 2026春季贵州安顺市普定县第五幼儿园学期教职工招聘15人(幼儿教师保育教师厨房人员)参考考试题库及答案解析
- 2026年甘肃省兰州市学府致远学校春季教师招聘12人考试参考试题及答案解析
- 隐静脉主干消融同期与分期处理属支
- 2026江西江铜南方公司第六批次社会招聘4人笔试备考题库及答案解析
- 2026湖南邵阳市邵阳县社会工作事务中心选调人员1人参考考试题库及答案解析
- 清廉元宵活动方案策划(3篇)
- 2026新疆阿合奇县公益性岗位(乡村振兴专干)招聘44人笔试参考题库及答案解析
- 北京中央广播电视总台2025年招聘124人笔试历年参考题库附带答案详解
- 纪委监委办案安全课件
- 儿科pbl小儿肺炎教案
- 腹部手术围手术期疼痛管理指南(2025版)
- JJG(吉) 145-2025 无创非自动电子血压计检定规程
- 颅内压监测与护理
- 智慧城市建设技术标准规范
- EPC总承包项目管理组织方案投标方案(技术标)
- 过年留人激励方案
- 除草机安全培训总结课件
评论
0/150
提交评论