《面向对象程序设计基础ppt课件.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计基础ppt课件.ppt(189页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程第5章 面向对象程序设计基础病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程面向对象面向对象的软件开发技术是当今计算机技术发展的重要成果和趋势之一。C#C#是完全面向对象的程序设计语言是完全面向对象的程序设计语言。类和对象类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性封装性、继承性和多态性是面向对象的特点。本章主要介绍面向对象程序设计中的基本概念和基于C#的面向对象程序设计的方法。2023/5/72C#程序设
2、计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程 5.1 面向对象概述5.1.1 面向对象的概念面面 向向 对对 象象 程程 序序 设设 计计(Object-Oriented Programming)简称OOP技术。面向对象编程技术是计算机编程技术中一次重大的进步。在面向对象编程技术出现之前,程序的设计普遍采用的是面向过程的程序设计方法。2023/5/73C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.1.1 面向对象的概念OOPOOP是
3、一种系统化的程序设计方法,强调直接以问题域(即是一种系统化的程序设计方法,强调直接以问题域(即现实世界)中的事物为中心来考虑问题,并按照这些事物现实世界)中的事物为中心来考虑问题,并按照这些事物的本质特征把它们抽象为对象。的本质特征把它们抽象为对象。OOPOOP的主要思想是将数据及处理这些数据的操作都封装的主要思想是将数据及处理这些数据的操作都封装(EncapsulationEncapsulation)到一个称为类()到一个称为类(ClassClass)的数据结构中。)的数据结构中。使用这个类时,只需要定义一个类的变量即可,这个变量使用这个类时,只需要定义一个类的变量即可,这个变量(Objec
4、tObject)通过调用对象的数据成员完成对类的使用。)通过调用对象的数据成员完成对类的使用。在这种方法下,编程人员不需要过分关注在这种方法下,编程人员不需要过分关注“如何做如何做”,而,而是重点关注是重点关注“做什么做什么”。OOPOOP编程思想较好地适应了现实世编程思想较好地适应了现实世界中的问题,因而得以广泛应用。界中的问题,因而得以广泛应用。2023/5/74C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.1.2 面向对象语言的特点面向对象的编程方式具有继承、封装和多态性等特点。(1)(1)继承继承在
5、生活中,事物有很多的相似性,这种相似性是人们理解纷繁事物的一个基础。因为事物之间往往具有某种“继承”关系。比如,儿子和父亲往往有许多相似之处,因为儿子从父亲那里遗传了许多特性;汽车与卡车、轿车、客车之间存在一般化与具体化的关系,它们也可以用继承来实现。2023/5/75C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.1.2 面向对象语言的特点继承(inheritance)是面向对象编程技术的一块基石,通过它可以创建分等级层次关系的类。继承是父类和子类之间共享数据和方法的机制,通继承是父类和子类之间共享数据和方
6、法的机制,通常把父类称为基类,子类称为派生类常把父类称为基类,子类称为派生类。子类可以从其父类中继承属性和方法,通过这种关系模型可以简化类的设计。假如已经定义了A类,接下来准备定义B类,而B类中有很多属性和方法与A类相同,那么就可以实现B类继承于A类,这样就无须再在B类中定义A类中已具有的属性和方法,从而可以在很大程序上提高程序的开发效率,提高代码利用率。2023/5/76C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.1.2 面向对象语言的特点例如,可以将水果看作一个父类,那么水果类具有颜色属性。然后再定义
7、一个香蕉类,在定义香蕉类时就不需要定义香蕉类的颜色属性,通过如下继承关系可以使香蕉类具有颜色属性。class 水果类Public 颜色;/在水果类中定义颜色属性class 香蕉类:水果类/香蕉类中其他的属性和方法2023/5/77C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.1.2 面向对象语言的特点(2)(2)封装封装类是属性和方法的集合,为了实现某项功能而定义类后,开发人员并不需要了解类体内每行代码的具体涵义,只需通过对象来调用类内某个属性或方法即可实现某项功能,这就是类的封装。封装提供了外界与对象进行
8、交互的控制机制,设计和实施者可以公开外界需要直接操作的属性和方法,而把其他的属性和方法隐藏在对象内部。这样可以让软件程序封装化,而且可以避免外界错误地使用属性和方法。2023/5/78C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.1.2 面向对象语言的特点以汽车为例,厂商把汽车的颜色公开给外界,外界想怎么改颜色都可以的,但是防盗系统的内部构造是隐藏起来的;更换汽缸可以是公开的行为,但是汽缸和发动机的协调方法就没有必要让用户知道了。2023/5/79C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机
9、体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.1.2 面向对象语言的特点(3)(3)多态性多态性类的多态(polymorph)指对于属于同一个类的对象,在不同的场合能够表现出不同的特征。多态性主要指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类具有不同的意义。例如:某个对象,其基类为“笔”,在调用它的“写”方法时,程序会自动判断出它的具体类型,如果是毛笔,则调用毛类对应的“写”方法,如果是铅笔,则调用铅笔对应的“写”方法。2023/5/710C#程序设计实用教程病原体侵入机体,消弱机
10、体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程 5.2定义类在C#中,“类”是一种数据结构,它可以包含数据成员数据成员(常量和字段)、函数成员函数成员(方法、属性、事件、索引器、运算符、构造函数、析构函数)。类是个静态的概念类是个静态的概念,如果要使用某个类,就应该定义该类的一个或多个实例,每一个实例就是一个对象。如果要使用某个类,只要向该类发送消息即可,而对象会利用自身存在的函数来响应接收的消息。类类型支持继承,继承是一种使派生类可以对基类进行扩展和专用化的机制。2023/5/711C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境
11、的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.1 类的概念类是对象概念在面向对象编程语言中的反映,是相同对象的集合。类描述了一系列在概念上有相同含义的对象,并为这些对象统一定义了属性和方法。类是对象的抽象描述和概括类是对象的抽象描述和概括。例如:车是一个类,自行车、汽车、火车也是类。但是自行车、汽车、火车都是车这个类的子类。因为他们有共同的特点都是交通工具,都有轮子,都可以运输。而汽车有颜色,车轮、车门、发动机,这是和自行车、火车的不同之处,是汽车类自己的属性。而具体到某辆汽车就是一个对象了,例如:车牌照为苏A2345*的黑色奥迪轿车。用具体的属性可以在汽车类中唯一确定
12、自己,并且对象具有类的操作。简而言之,类是C#中最为强大的数据类型,它定义了数据类型的数据和行为。2023/5/712C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.1 类的概念在C#中,所有的内容都被封装在类中,类是C#的基础,每个类通过属性和方法及其他一些成员来表达事物的状态和行为。事实上,编写C#程序的主要任务就是定义各种类及类的各种成员。2023/5/713C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2
13、类的声明简单地讲,类是一种数据结构,用于模拟现实中存在的对象和关系,包含静态的属性和动态的方法。下面来看如何声明类及其属性、方法。在声明一个类之前,需要向工程中新添加一个文件。2023/5/714C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2 类的声明1.1.向工程添加新项目向工程添加新项目在VS.NET中添加一个新的类文件以及其他新项目。操作很简单,具体步骤如下:(1 1)在【解决方案浏览器】视图中,在工程上单击右键,再在打开的快捷菜单中选择【添加】【类】,如图5-1所示。2023/5/715C#程
14、序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2 类的声明(2 2)在此时弹出的对话框中选择添加类文件,并为新文件命在此时弹出的对话框中选择添加类文件,并为新文件命名,以名,以.cs.cs作为后缀,如图作为后缀,如图5-25-2所示。所示。(3 3)单击单击【打开打开】按钮后,就可以在按钮后,就可以在【解决方案浏览器解决方案浏览器】视视图中看到这个新的类文件了。图中看到这个新的类文件了。(4 4)双击该类文件,可以在其中声明新的类。双击该类文件,可以在其中声明新的类。当然,也可以把多个功能类似的类放在一个类文
15、件中。当然,也可以把多个功能类似的类放在一个类文件中。2023/5/716C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2 类的声明2.2.声明类声明类C#中类的声明需要使用class关键字,并把类的主体放在花括号中,格式如下:类修饰符 class 类名:基类类名/属性/方法其中,除了class关键字和类名外,剩余的都是可选项;类名必须是合法的C#标识符,它将作为新定义的类的类型标识符。2023/5/717C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长
16、繁殖,引起不同程度的病理生理过程5.2.2 类的声明注意:注意:为了促进C#程序的标准化和可读性,应尽量采用.NET Framework推荐的类命名规则:类名尽量是一个名词或者名词短语,首字母大写,并尽量避免缩写。class关键字前面是访问级别。在C#中,类的访问级别由类的修饰符进行限定,类的修饰符如表5-1所示。在上例中,如果类的修饰符为public,这表示该类可以被任何其他类访问。类的名称位于class关键字的后面。2023/5/718C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2 类的声明以上的
17、类修饰符可以两个或多个组合起来使用,但需要注意下面几点:(1)在一个类声明中,同一类修饰符不能多次出现,否则会出错。(2)new类修饰符仅允许在嵌套类中表示类声明时使用,表明类中隐藏了由基类中继承而来的、与基类中同名的成员。2023/5/719C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2 类的声明(3)(3)在使用public、protected、internal和private这些类修饰符时,要注意这些类修饰符不仅表示所定义类的访问特性,而且还表明类中成员声明中的访问特性,并且它们的可用性也会对派
18、生类造成影响。(4)(4)抽象类修饰符abstract和密封类修饰符sealed都是受限类修饰符。2023/5/720C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2 类的声明(5)(5)如果省略类修饰符,则默认为修饰符internalinternal。(6)(6)对于具有继承关系的类才有基类。如果一个类没有从任何类继承,就不需要基类类名选项。在C#中,一个类只能从另一个类中继承,而不能从多个类中继承;而在C+及其他面向对象的程序设计语言中,一个类可以从多个其他类中继承。如果一个类想继承多个类的特点,可
19、以采用接口的方法实现。2023/5/721C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程Msdn:搜索access modifiersClass and Struct AccessibilityClass and Struct Accessibility Classes and structs that are declared directly within a namespace(in other words,that are not nested within other classes or struc
20、ts)can be either public or internal.Internal is the default if no access modifier is specified.病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程Class and Struct Member AccessibilityClass and Struct Member Accessibility Class members(including nested classes and structs)can be declared with any
21、 of the five types of access.Struct members cannot be declared as protected because structs do not support inheritance.病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程访问权限控制图解访问权限控制图解病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程publicpublic The type or member can be accessed by any
22、other code in the same assembly or another assembly that references it.privateprivate The type or member can be accessed only by code in the same class or struct.protectedprotected The type or member can be accessed only by code in the same class or struct,or in a class that is derived from that cla
23、ss.internalinternal The type or member can be accessed by any code in the same assembly,but not from another assembly.protected internal protected internal The type or member can be accessed by any code in the assembly in which it is declared,or from within a derived class in another assembly.Access
24、 from another assembly must take place within a class declaration that derives from the class in which the protected internal element is declared,and it must take place through an instance of the derived class type.病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.2 类的声明下面以一个学生类的实例,说明该类在C#中
25、的实现。该类的类图如图5-3所示。【例例5-15-1】定义一个学生类。public class Student /属性 /学号、姓名、年龄等 /方法 /长大、入学、毕业等2023/5/726C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.3 类的静态特性属性(或字段)可以看作是类的静态描述,同样,在定义属性时,也可以使用访问修饰符来定义其访问级别。属性的定义格式如下:attribe-modifier data-type attribute-name;其中,属性修饰符attribe-modifier包括pu
26、blic、private、protected。下面的例子用来说明public和private修饰符的作用。2023/5/727C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.3 类的静态特性【例例5-25-2】publicpublic和和privateprivate修饰符的修饰符的作用。作用。using System;using System;namespace namespace Example_PublicAndPrivateExample_PublicAndPrivate /学生类学生类 /publ
27、ic class Student public class Student /属性属性 public string strName;/public string strName;/公有属公有属性性 private int nAge;private int nAge;/私有属性私有属性 /方法方法./Main /Main函数类函数类 /class Test class Test /应用程序的主入口点。应用程序的主入口点。/static void Main(string args)static void Main(string args)Student s=new Student();Studen
28、t s=new Student();s.strName=s.strName=张三张三“;/;/正确正确 s.nAge=20;/s.nAge=20;/错误,不能访错误,不能访问问 2023/5/728C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.3 类的静态特性上述程序中,定义一个Student类,包含一个公有属性“strName”和一个私有属性“nAge”。在Test类中,试图对学生类的对象s的年龄进行设置,但是Student类的nAge属性是私有的,在其他的类中无法访问,因此程序会报错,报错信息如图5
29、-4所示。而访问其公有属性strName就不会有问题。2023/5/729C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.4 类的动态行为类的属性是客观世界实体性质的抽象,而方法是实体所能执行的操作。下面来看如何声明其动态方法。同属性一样,类的方法也具有访问属性,如public、private、protected等,其定义格式如下:method-modifier return-type method-nameparament-list;下面的例子为Student类定义了公有方法SetAge()和GetAg
30、e(),用于设置和获取其静态属性“年龄”。2023/5/730C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.4 类的动态行为【例例5-35-3】类的公有方法的示例。类的公有方法的示例。using System;using System;namespace DeclareMethodnamespace DeclareMethod /学生类学生类 /public class Student public class Student /属性属性 public string strName;public str
31、ing strName;/公有属性公有属性 private int nAge;private int nAge;/私有属性私有属性 /方法方法.public void SetAge(int _nAge)public void SetAge(int _nAge)this.nAge=_nAge;this.nAge=_nAge;2023/5/731C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.4 类的动态行为 public int GetAge()public int GetAge()return this.
32、nAge;return this.nAge;/Main /Main函数类函数类 /class Class1 class Class1 static void Main(string args)static void Main(string args)Student s=new Student();Student s=new Student();s.SetAge(20);s.SetAge(20);/赋值年龄赋值年龄 Console.WriteLine(s.GetAge();Console.WriteLine(s.GetAge();/获取年龄获取年龄 2023/5/732C#程序设计实用教程病原体
33、侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.4 类的动态行为程序中为各个学生定义了公有方法SetAge(),其功能是为类的私有属性“年龄”赋值;同时为学生类定义了获取“年龄”属性值的公有方法GetAge()。通过SetAge()方法,并传递适当的参数,便可以为学生s的年龄赋值,而通过调用GetAge()方法获取其年龄,并输出。2023/5/733C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.5 创建类的实例类是现实世界中对象或者关系的模
34、拟,是一个抽象的概念。例如,像类是现实世界中对象或者关系的模拟,是一个抽象的概念。例如,像“学生学生”这个概念,世界上并没有一个叫做这个概念,世界上并没有一个叫做“学生学生”的活生生的东西,的活生生的东西,而只有而只有“张三张三”或者或者“李四李四”这些具体的学生实例,这反应了类和对这些具体的学生实例,这反应了类和对象的关系。象的关系。(1 1)类是具有相同或相似结构、操作和约束规则的对象组成的集合。类是具有相同或相似结构、操作和约束规则的对象组成的集合。(2 2)对象是某一类的具体化实例,每一个类都具有某些共同特征对象对象是某一类的具体化实例,每一个类都具有某些共同特征对象的抽象。的抽象。C
35、#C#使用使用newnew关键字来实现实例化类得到一个具体的对象,其格式如下:关键字来实现实例化类得到一个具体的对象,其格式如下:class-name object-name=new Class-class-name object-name=new Class-name(paramentername(paramenter-list);-list);在前面的示例中已经用到创建类实例,都是使用在前面的示例中已经用到创建类实例,都是使用newnew关键字得到一个关键字得到一个具体的学生对象。如下列代码所示:具体的学生对象。如下列代码所示:Student s=new Student();Student
36、 s=new Student();2023/5/734C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.6 继承类继承的本质是代码重用继承的本质是代码重用。当要构造一个新的类时,通常无需从头开始。例如,在学生类的基础上,可以建立一个“大学生”类。很明显,“大学生”这个类具有自己的新特点,如“所在系”就并不是所有的学生都有的,而是大学生才有的特殊性质。因此,可以把大学生看作是学生的一种延续大学生看作是学生的一种延续,即在继承了学生的属性和方法基础之上,又包含了新的属性或方法。在构造大学生这个类时,只需在学生类
37、的基础上添加大学生特有的特性即可,而无需从头开始。此时,称学生类为父类,大学生类为子类。在C#中,用符号“:”来实现类的继承。2023/5/735C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.6 继承类【例例5-45-4】类继承的示例。类继承的示例。using System;namespace Example_Inheritance /学生类 /public class Student public string strName;/姓名 public int nAge;/年龄 2023/5/736C#程
38、序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.6 继承类/大学生类:继承学生类 /public class CollegeStudent:Student public string strInsititute;/所在系 2023/5/737C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.6 继承类/程序入口:主函数类 /public class MainClass /主函数 /static void Main(strin
39、g args)Student s=new Student();s.strName=xiaobao;s.nAge=18;Console.WriteLine(姓名:0,年龄1,s.strName,s.nAge);2023/5/738C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.6 继承类 /使用子类 Console.WriteLine(-使用子类-);CollegeStudent c=new CollegeStudent();c.strName=小宝;c.nAge=23;c.strInsititute=计算
40、机系;Console.WriteLine(姓名:0,年龄:1岁,所属系:2,c.strName,c.nAge,c.strInsititute);Console.ReadKey();2023/5/739C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.2.6 继承类程序运行结果如图5-5所示。注意:注意:此时,大学生类具有学生类的所有属性和方法,另外,还具有其独自的属性所在系。不难看出,继承就是指一个子类能够直接获得父类的性质或特征,而不必重复定义。显然,继承具有传递性。另外,C#只支持单继承,即一个类只能继承一
41、个父类。2023/5/740C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程 5.3 构造函数和析构函数在实际应用中,方法的定义和调用是很复杂的。在此,将从两个特殊的方法(构造函数和析构函数)入手,对其进行进一步的讨论。在C#中,构造函数是当类实例化时首先执行的函数构造函数是当类实例化时首先执行的函数。反反之,析构函数是当实例(也就是对象)从内存中销毁前之,析构函数是当实例(也就是对象)从内存中销毁前最后执行的函数最后执行的函数。这两个函数的执行是无条件的,并且不需要程序手工干预。也就是说,只要定义一个对象或销毁
42、一个对象,不用显式地调用构造函数或析构函数,系统都会自动在创建对象时调用构造函数,而在销毁对象时调用析构函数。2023/5/741C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数在实例化对象的时候,对象的初始化是自动完成的,并且这个对象是空的。有时,我们希望创建一个对象时要为其初始化某些特征,我们希望创建一个对象时要为其初始化某些特征,这时就需要用到构造函数这时就需要用到构造函数。在C#中,构造函数是特殊的成员函数。构造函数的特殊性表现在如下几个方面:(1)构造函数的函数名和类的名称一样。(2
43、)构造函数可以带参数,但没有返回值。(3)构造函数在对象定义时被自动调用。2023/5/742C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数(4)如果没有给类定义构造函数,则编译系统会自动生成一个默认的构造函数。(5)构造函数可以被重载,但不可以被继承。(6)构造函数的类型修饰符总是public。如果是private,则表示这个类不能被实例化,这通常用于只含有静态成员的类中。2023/5/743C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长
44、繁殖,引起不同程度的病理生理过程5.3.1 构造函数【例例5-55-5】通过构造函数,实现在产生一个学生对象时为其完成通过构造函数,实现在产生一个学生对象时为其完成起名工作。起名工作。using System;namespace Example_Construct /学生类 /public class Student public string strName;/域 2023/5/744C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数 /构造函数,为学生起名 /public Student(s
45、tring _strName)this.strName=_strName;class Class1 static void Main(string args)Student s=new Student(张三);Console.WriteLine(s.strName);2023/5/745C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数注注意意:在Student类中,定义了方法Student(),注意这个方法与Student类同名。这样,每当实例化一个Student对象时,总会执行这个函数。在构
46、造函数中可以没有参数,也可以有一个或多个参数。这表明构造函数在类的声明中可以有函数名相同,但参数个数不同或者参数不同的多种形式,这就是构造函数重载构造函数重载。用new关键字创建一个类的对象时,类名后的一对圆括号提供初始化列表,这实际上就是提供给构造函数的参数。系统根据这个初始化列表的参数个数、参数类型和参数顺序调用不同的构造函数。2023/5/746C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数【例例5-65-6】实现Time类的构造函数及其重载。using System;namespac
47、e Example_ConstructOverload class Time public int nHour,nMinute,nSecond;public Time()nHour=nMinute=nSecond=0;2023/5/747C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数 public Time(int Hour)nHour=Hour;nMinute=nSecond=0;public Time(int Hour,int Minute)nHour=Hour;nMinute=Minu
48、te;nSecond=0;2023/5/748C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数 public Time(int Hour,int Minute,int Second)nHour=Hour;nMinute=Minute;nSecond=Second;class Test static void Main()Time t1,t2,t3,t4;2023/5/749C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理
49、生理过程5.3.1 构造函数 /对t1,t2,t3,t4分别调用不同的构造函数 t1=new Time();t2=new Time(10);t3=new Time(10,30);t4=new Time(10,30,30);Console.WriteLine(t1的时间为:0时1分钟2秒,t1.nHour,t1.nMinute,t1.nSecond);Console.WriteLine(t2的时间为:0时1分钟2秒,t2.nHour,t2.nMinute,t2.nSecond);Console.WriteLine(t3的时间为:0时1分钟2秒,t3.nHour,t3.nMinute,t3.nSe
50、cond);Console.WriteLine(t4的时间为:0时1分钟2秒,t4.nHour,t4.nMinute,t4.nSecond);2023/5/750C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.1 构造函数程序运行结果如图5-6所示。注意:注意:实例对象创建时,根据不同的参数调用相应的构造函数完成初始化。2023/5/751C#程序设计实用教程病原体侵入机体,消弱机体防御机能,破坏机体内环境的相对稳定性,且在一定部位生长繁殖,引起不同程度的病理生理过程5.3.2 析构函数前面,介绍了使用构