版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 类与对象北京科技大学经济管理学院 崔健双,C#程序设计,教学目标,(1) 理解面向对象的编程思想; (2) 理解类和对象之间的关系; (3) 学会自定义类,学会创建与使用对象; (4) 能区分字段与属性、属性与方法; (5) 掌握实例构造函数重载及其应用,了解析构函数; (6) 能区分实例成员与静态成员,能定义并正确调用两种成员; (7) 掌握对象作为方法参数在值传递方式和引用传递方式下的区别。,本章主要内容,5.1 面向对象基本概念 5.2 类和对象 5.3 类的静态成员 5.4 构造函数与析构函数 5.5 对象作参数与返回值为对象 5.6 小结 练习题,5.1 面向对象基本概念,一
2、、对象 对象是描述现实生活中客观事物的一个实体,在现实生活中经常提到的“东西”就是对象。 例如,一只猫、一辆车、一本书、一个方案、一项计划等。,5.1 面向对象基本概念,一个对象往往有自己的特征(属性)和行为,其中属性描述对象的静态特征;行为(操作或方法)描述对象的动态特征 例如,一只猫的特征有品种、毛色、年龄、体重等;行为有喵喵叫、抓老鼠、玩线团等。,5.1 面向对象基本概念,二、类 现实生活中一组具有共同特征和行为的相似对象,可以归纳为一类。 例如,猫可以归纳为具有品种、毛色、年龄、体重等特征和具有喵喵叫、抓老鼠、玩线团等行为的一个类。,5.1 面向对象基本概念,在程序设计中,把一组具有相
3、似特征和行为的对象归纳出来形成一个类的过程称为抽象,包括特征数据的抽象和行为的抽象。每一个对象都是类的一个实例(instance)。 例如,每只猫都具有猫类所规定的特征和行为,但是,每只猫又都拥有自己的具体特征值和行为。 打个比方,类就相当于一个模板,而对象则是由这个模板产生出来的具体产品。,5.1 面向对象基本概念,打个比方,类就相当于一个模板,而对象则是由这个模板产生出来的具体产品。模板仅有一个,但可以产生出无数个对象。,5.1 面向对象基本概念,三、面向对象的几个特征 封装:把对象的数据和行为细节向外部隐藏起来就是所谓的封装。 封装起来的类对外部提供统一的接口,类的使用者只要知道如何调用
4、这些接口的方法就够了。 封装的好处:一是提供了安全机制,外界不能改变类的内部代码;二是降低了软件的复杂性,即如果类内部的代码被修改,只要对外的接口不变,对类的使用者就丝毫没有影响。,5.1 面向对象基本概念,继承 一个类从另一个类获得该类已有的特征就是继承,而在此基础上增加自身的一些特殊特征就是派生。 例如,汽车是一种交通工具,可以让汽车类继承交通工具类的所有特征,在此基础上再添加自己的新特征(如在公路上行驶)。汽车类继承交通工具类,交通工具类派生出汽车类。 继承与派生的目的是实现代码重用,减少编程工作量。,5.1 面向对象基本概念,多态 多态是指用户对对不同的对象执行相同的操作却产生不同的结
5、果。从多态发生的时机上分,多态可以分为编译时多态和运行时多态两种。,5.1 面向对象基本概念,消息通信 对象之间不是彼此独立的,它们通过消息进行通信。 一个程序的运行可以被看作是对象之间相互发送消息,执行相应的操作并返回所需结果或改变对象的状态的过程。,5.2 类和对象,一、案例说明 【案例简介】 定义一个猫类Cat,描述猫的以下特征和行为:品种、毛色、体重、出生日期、喵喵叫、抓老鼠。创建并使用这个类的实例。运行结果如图。 【案例目的】 (1) 学会自定义类; (2) 学会用自定义类创建、实例化对象、引用对象成员。 【技术要点】掌握类定义的结构框架。,5.2 类和对象,类的字段(成员),类的方
6、法(成员函数),DateTime 类是System 命名空间的日期时间类,声明并实例化一个猫对象,声明并实例化另一个猫对象,二、代码分析及相关知识点 1.代码实现的功能 定义了一个猫类Cat,描述了猫的品种、毛色、体重、出生日期4个静态特征,以及喵喵叫、抓老鼠等行为特征。在Main()方法中声明并实例化两个猫类对象。,5.2 类和对象,2类定义的一般格式 类体中包含字段、方法、属性等成员。其中字段是“存储信息”的成员;方法是用于描述某类对象共同行为的成员,是“做事情”的成员。,class private protected public ,5.2 类和对象,3对象的定义与使用 (1)方法1.
7、先声明对象,再实例化,类名 对象名; /声明对象 对象名new类名();/实例化对象,5.2 类和对象,例如,Cat catBobi; catBobi= new Cat();,(2)方法2. 声明对象的同时完成实例化 例如,Cat catBobi = new Cat();,类名 对象名= new 类名();,5.2 类和对象,2. 对象的定义与使用 2) 对象的使用 在面向对象中,对象不是一个被动接受处理的数据,而是一个拥有数据并能主动提供服务的实体。一个对象被创建后,就可以通过对象本身来获取对象状态或调用对象行为。 调用对象成员的格式为:,对象名.对象成员,5.2 类和对象,3类成员的访问修
8、饰符,表5-1 类的成员的访问修饰符及其含义,5.2 类和对象,4类的属性 为什么使用属性 除了添加公有方法读写字段外,C#能否提供一种更有效的访问形式,既能读写字段,同时又保证数据成员能被更好地隐藏和保护起来呢?那就是使用属性。属性是类的一种特殊成员,它具有字段的形式,又具有方法的本质 2)怎样定义属性 属性的定义格式为:,修饰符 类型 属性名 set /写入数据 get /读取数据 ,5.2 类和对象,4类的属性 3) 属性的读写控制 属性的get和set访问器并非都是必须的,如果只有get访问器,该属性只可以读取,不可以写入;如果只有set访问器,该属性只能写入,不能读取;两个都有表示可
9、读写。如果对只读属性进行赋值,或者读取只写属性的值,都会产生编译错误。,5.2 类和对象,4类的属性 4) 在属性中完成更多的功能 思考:如果向本案例提一个进一步的要求:为猫类添加年龄特征。该怎么做呢? 直观的想法是设置一个age字段。如果采用age字段,因为年龄会随着时间推移而变化,为了得到精确的猫龄需要不断地更新age字段,这显然不合适,而且birthday字段已经间接地包含了年龄信息,再增加字段造成重复存储;如果采用属性,在Age属性的读操作中可以包含一个动作“计算猫龄”,那么无论何时都可以得到精确的猫龄。,5.2 类和对象,5VS.NET IDE使用进阶: 如果已经定义好了字段,想要为
10、字段写一个属性,可以利用VS.NET的重构功能很方便地实现。 具体做法:选中要封装的字段定义代码,例如选中“string variety;”,单击鼠标右键,在弹出的快捷菜单中选择【重构】|【封装字段】命令,在弹出的“封装字段”对话框的“属性名”文本中已存在一个属性名“Variety”,读者可以默认也可以修改它,单击“确定”按钮,可以在弹出的“预览引用更改一封装字段”对话框内浏览代码更改,单击“应用”按钮,一个完整的“Variety”属性定义便出现在对应字段的下一行。,5.2 类和对象,5.3 类的静态成员,一、案例说明 【案例简介】 定义猫类Cat,在Cat类中定义字段、属性和方法(见案例Ex
11、ample5_1),在Cat类中添加表示对象数量的静态字段,并定义相应的静态属性。在Program类中的Main()方法里声明两个Cat类对象并添加对静态属性的调用。 案例运行结果如右图所示。,5.3 类的静态成员,【案例目的】 (1) 理解类的静态成员的含义与作用; (2) 掌握静态字段、静态属性的定义与使用。 【技术要点】 (1) 用static修饰符来定义静态字段、静态属性、静态方法; (2) 通过类名调用静态属性、静态方法。,5.3 类的静态成员,5.3.2代码及分析 (代码另附) 定义了一个Cat类描述猫类,在Example 5-1的基础上增加了表述数量的字段count,该字段是静态
12、字段,另外添加了读写该字段的静态属性Count和静态方法GetCount()。,5.3 类的静态成员,5.3.3相关知识及注意事项 类的成员有实例成员和静态成员之分。类的实例成员和静态成员最简单的区分方法就是看定义这些成员时是否使用了static修饰符。 1静态字段 如果在声明字段时添加了static修饰符,该字段就成为静态字段。静态字段用于存储一些属于某个类的全部对象的信息,它是被类的全体对象共享的数据。 例如:为Cat类添加一个静态字段count,用于表示当前存在的猫对象总数。,5.3 类的静态成员,2静态属性 为了对外界隐藏数据的同时方便对静态字段的访问,往往需要使用静态属性。为Cat类
13、添加一个静态属性Count,代码如下: 静态属性与静态字段一样不属于任何对象,因此它们不能被对象所调用,而是由类名直接调用:,class Cat private static int count; public static int Count set count = value; get return count; ,类名.静态字段名; 类名.静态属性名;,5.3 类的静态成员,3静态方法 如果在声明方法时添加了static修饰符,该方法就成为静态方法。静态方法属于类,只能通过类名调用,不能由对象调用。一直在使用的Main()方法就是一个静态方法。 注意:静态方法只能访问静态字段或属性,不能
14、访问实例字段或属性。而实例方法既可以访问实例字段也可以访问静态字段。 静态方法由类名直接调用:,public static int GetCount() /静态方法 return count; ,Console.WriteLine(目前有0只猫, Cat.GetCount();,5.4 构造函数与析构函数,5.4.1案例说明 【案例简介】 定义猫类Cat,在Cat类中定义字段、属性和方法,定义表示数量的静态字段及相应的静态属性、静态方法,再往Cat类中添加实例构造函数、静态构造函数和析构函数,即在案例Example5_2的基础上再添加构造函数和析构函数。在Program类中的Main()方法里
15、声明两个Cat类对象,并使用不同的实例构造函数初始化对象。 案例运行结果如右图所示。,5.4 构造函数与析构函数,【案例目的】 (1) 掌握实例构造函数的定义、重载及使用; (2) 了解静态构造函数、析构函数的定义与用途。 【技术要点】 (1) 实例构造函数的重载及使用; (2) 在对象实例化和析构的过程中,能正确处理数量字段的变化。,5.4 构造函数与析构函数,5.4.2代码及分析 定义了一个Cat类,并且在原来Example5_2的基础上添加了实例构造函数、析构函数,还对实例构造函数进行了重载。根据对象出生和消亡过程,分别在构造函数中使用语句“count+;”表示一个对象出生了,数量增加一
16、个;在析构函数中使用语句“count-;”表示一个对象消亡了,数量减少一个。,5.4 构造函数与析构函数,5.4.3相关知识及注意事项 1构造函数 1) 什么是构造函数 对象在实例化的时候,可以进行数据成员的设置,称为对象的初始化;另外,类有时也需要做一些初始化工作,这些工作都由构造函数完成。构造函数也称构造方法,它的基本特点是: (1) 构造函数名与类名相同; (2) 构造函数没有返回值,且函数头部不用写“void”; (3) 除了在实例化对象时由系统调用以及派生类构造函数调用基类构造函数之外,其他任何函数都不能调用它。,5.4 构造函数与析构函数,2)构造函数的声明与调用,public C
17、at(string myVariety,string myColor, float myWeight) variety = myVariety; hairColor = myColor; weight = myWeight; birthday = DateTime.Today; ,用new运算符创建一个对象时,构造函数名后所跟的参数列表就是对象的初始化列表。,Cat catBobi = new Cat(波斯猫, 白色, 2.3F);,5.4 构造函数与析构函数,3)构造函数的重载 构造函数可以重载,以方便程序员初始化对象。,public Cat(string myVariety,string
18、myColor, float myWeight) public Cat (float myWeight, string myVariety, string myColor ) ,添加了这些构造函数后,可以在Main()方法中按照如下所示的多种方式创建并初始化对象:,Cat catBobi = new Cat(波斯猫, 白色, 2.3F); Cat catBobi = new Cat(波斯猫, 2.3F, 白色); Cat catBobi = new Cat(2.3F,波斯猫, 白色);,5.4 构造函数与析构函数,4)静态构造函数 静态构造函数通常用于对类的静态字段进行初始化。 为Cat类添加静态构造函数对count字段进行初始化。,static Cat()/静态构造函数 count = 0; ,静态构造函数有如下特点: (1) 仅有一个static修饰符。 (2) 只对静态字段赋初值。 (3) 由系统自动调用,一个类仅调用一次,与创建对象操作无关。,5.4 构造函数与析构函数,5析构函数 1) 什么是析构函数 在对象使用结束时,可以进行一些相关的清理工作并释放所占用的内存空间,这个工作由析构函数完成。析构函数的特点如下: (1) 析构函数的名称与类名相同,在类名前加“”; (2) 析构函数没有返回值,也不能声明
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026二下数学全册大单元课件
- 2026二下数学第三单元课件
- 2026中国塑料薄膜行业市场当前竞争格局及投资前景风险评估规划报告
- 新鲜出炉的笔试题目及答案
- 2026中国制药行业竞争态势现状研发投入及未来发展投资评估规划分析
- 教育学综合试题及答案集成
- 三星电子(中国)员工素质提升培训塑造最佳习惯
- 一元二次方程课件
- 污泥规范化处置实施方案
- 职业能力测试易错题目及答案
- 2026-2030中国戊烷80和和20行业市场发展趋势与前景展望战略分析研究报告
- 工程常见质量问题监理实施细则
- 2026水务集团面试题目及答案
- 泳池灯光安装调试施工方案及技术措施
- 2026年部编版二年级上册语文教材分析
- 2026年养老管理师考试试题及答案详解
- 2026年广西公需科目全套1卷《人工智能国家战略与政策通识》
- T-CECS 《多段多级AO除磷脱氮技术规程》
- 脑卒中康复护理中的家庭护理指导
- 涟源市六亩塘镇招聘社区网格员备考题库附答案详解
- 2026年电商平台主播合作协议内容范本
评论
0/150
提交评论