您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 第3章面向对象程序设计
3.1类在面向对象程序设计中,类被作为一种数据结构,是包含数据成员、函数成员和嵌套类型的数据结构。类声明属性类修饰符class类名{类体}类修饰符包括new、public、protected、internal、private、abstract和sealed。【例3-1】定义一个Person类创建类实例格式为:类名实例名=new类名(参数);两种形式PersonmyTest=newPerson();或PersonmyTest;myTest=newPerson();类成员类成员分为两大类,类本身定义的成员和从基类继承来的成员。类成员包括函数成员和数据成员。1.类成员访问修饰符访问修饰符用于指定类成员的可访问性。共有public、private、protected和internal四个类成员访问修饰符。2.静态成员与实例成员当用static修饰符声明成员时,得到静态成员,静态成员属于类,为这个类的所有实例所共享不用static修饰符声明的成员,称为实例成员,实例成员被类的实例所拥有。构造函数和析构函数构造函数用于为对象分配空间,完成初始化工作。构造函数特殊性表现在:构造函数的名字必须与类名相同;构造函数可以带参数,但没有返回值;构造函数在对象定义时被自动调用;如果没有给类定义构造函数,则编译系统会自动生成一个缺省的构造函数,其形式如下:publiccon():base(){}构造函数可以被重载,但不可以被继承。实例构造函数用于创建和初始化实例,创建新对象时要调用实例构造函数,其格式为:访问修饰符类名(形参列表){函数体}静态构造函数用于初始化静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。其格式为:static类名(){函数体}析构函数主要用于释放类实例。析构函数特殊性表现在:析构函数的名字与类名相同,但它前面加一个“~”符号;析构函数不能够带参数,也没有返回值;当撤销对象时,自动调用析构函数;析构函数不能被继承,也不能被重载。【例3-3】使用构造函数和析构函数方法方法是表现类或对象行为的成员函数。1.方法声明声明格式:方法修饰符返回类型方法名(形参列表){方法体}修饰符包括:new、public、protected、internal、private、static、virtual、sealed、override、abstract和extern。2.方法参数(1)值参数未用任何修饰符声明的参数为值参数。(2)引用参数用ref修饰符声明的参数为引用参数。在方法中对引用参数的任何更改都会反映给实参。(3)输出参数用out修饰符声明的参数称为输出参数。如果希望函数返回多个值,可使用输出参数。【例3-4】使用值参数【例3-5】使用引用参数(4)参数数组用params修饰符声明的变量称为参数数组,它允许向函数传递个数变化的参数。【例3-6】使用输出参数【例3-7】使用参数数组3.静态方法和实例方法用static修饰符声明的方法为静态方法,它不与实例相关联,它属于类。只需要类名和方法名就可调用静态方法未用static修饰符声明的方法为实例方法。它与特定实例相关联。可以用this来访问该实例。实例方法可以访问类中的任何成员。【例3-8】使用静态方法和实例方法4.方法重载它允许一个类中有同名的方法存在为了区分这些同名方法,要求方法有不同的参数,要么参数个数不同,要么参数类型不同。【例3-9】使用方法重载5.运算符重载运算符重载可以对C#中已有的运算符赋予新的功能。其格式为:publicstatic返回值类型operatorunary-operator(参数列表){方法体}【例3-10】重载Point类的++和+6.this关键字this关键字引用类的当前实例,成员通过this关键字可以知道自己属于哪一个实例。this关键字是一个隐含引用,它隐含于每个类的成员函数中。this的常用用途:限定被相似的名称隐藏的成员将对象作为参数传递到其他方法声明索引器字段与属性1.字段字段表示与对象或类相关联的变量。静态字段:用static修饰符声明的字段,无论存在多少个类实例,它们都共享一个静态字段拷贝。实例字段:没用static修饰符声明的字段,类的每个实例都包含实例字段的一个拷贝。只读字段:用readonly修饰符声明的字段,它只能在字段声明或构造函数中赋值,在其它任何地方都不能改变只读字段的值。【例3-11】使用字段2.属性属性用于刻画对象的特征或表示对象的状态,它提供对类或对象性质的访问。其格式为:访问修饰符数据类型属性名{get{get访问器代码块}set{set访问器代码块}}set访问器:给属性赋值,它使用value设置属性的值get访问器:获取属性值,它通过return返回属性的值。如果只有get访问器,表示是只读属性;如果只有set访问器,表示只写属性;如果既有get访问器,也有set访问器,表示读写属性。【例3-12】使用属性继承继承是面向对象程序设计的一个重要特征,它允许在既有类的基础上创建新类,新类从既有类中继承类成员,而且可以重新定义或加进新的成员,从而形成类的层次或等级。一般称被继承的类为基类或父类,而称继承后产生的类为派生类或子类。C#继承有如下重要性质:C#只允许单继承,即派生类只能有一个基类;C#的继承是可传递的,如果C从B派生,而B从A派生,那么C就会既继承在B中声明的成员,又继承在A中声明的成员;派生类扩展它的直接基类,即派生类可以添加新的成员,但不能删除从基类继承的成员;构造函数和析构函数不能被继承;派生类可以隐藏基类的成员,如果在派生类中声明了与基类同名的新成员时,基类的该成员在派生类中就不能被访问到。1.派生类的声明类修饰符class类名:基类{类体}【例3-13】从Person类派生Employee2.base关键字base关键字用于从派生类中访问基类的成员,它有两种基本用法:指定创建派生类实例时应调用的基类构造函数,用于调用基类的构造函数完成对基类成员的初始化工作;在派生类中访问基类成员。3.成员隐藏在派生类中,通过声明与基类同名的新成员可以隐藏基类的成员多态多态性是指不同对象收到相同消息时,会产生不同动作。从而实现“一个接口,多种方法”。C#支持两种多态性:编译时多态性,是在程序编译时就决定如何实现某一动作,是通过方法重载和运算符重载实现的。是运行时多态性,是在运行时动态实现某一动作,是通过继承和虚成员实现的。【例3-15】通过虚方法实现多态性抽象类抽象类表示一种抽象的概念,用来为它的派生类提供一个公共接口。声明类抽象类:加上abstract修饰符抽象类只能作为其它类的基类,不能实例化。抽象类可以包含抽象方法和抽象访问器,也可以包含实例字段和非抽象方法【例3-16】使用抽象类【例3-16】使用抽象类3.2接口接口并不提供实现。它只表示一种约定,实现接口的类或结构必须遵守该接口定义的约定。接口声明格式:接口修饰符interface接口名:基接口{接口体}[例]声明一个IShape接口publicinterfaceIShape{doubleArea();stringType{get;}}注意:接口的所有成员都被定义为公有的,使用其它修饰符是错误的;接口不能包含常量、域;接口不能包含构造函数、析构函数和静态成员。【例3-23】实现IShape接口。3.4委托与事件委托属于引用类型,用于封装方法(函数)的引用使用委托的步骤:委托声明;委托实例化;委托调用。委托声明的格式:修饰符delegate返回值类型标识符(形参列表);委托实例化用于创建委托实例。与类实例创建的语法相同委托[例3-28]冒泡法排序classProgram{staticvoidMain(string[]args){…….;Selects=newSelect();Sort.Comparecp=newSort.Compare(s.Ascending);Sort.BubbleSort(ElementArray,cp);………;cp+=newSort.Compare(s.Descending);Sort.BubbleSort(ElementArray,cp);……;}}事件对象之间的交互是通过消息传递来实现的,而事件就是对象发送的消息,通过发信号的形式通知操作的发生。事件声明的具体格式为:属性集修饰符event委托类型事件名;例3-31使用C#事件,显示当前时间[例]使用C#事件,显示当前时间publicdelegatevoidTimeEventHandler(strings);//委托声明classMyTime{publiceventTimeEventHandlerTimer;//声明事件publicvoidOnTimer(strings){if(null!=Timer)Timer(s);}}//引发事件classProcessTime{publicvoidGenerateTime(strings){//事件处理Console.WriteLine(Hello{0}!Thetimeis{1}now,s,DateTime.Now);}}classTestTime{staticvoidMain(string[]args){ProcessTimep=newProcessTime();MyTimet=newMyTime();//把事件与事件处理联系起来t.Timer+=newTimeEventHandler(p.GenerateTime);t.OnTimer(Peter);}}//使用事件习题3-5-1设计一个矩形类,要求能够计算矩形的面积,比较两个矩形的大小。习题3-5-3设计一个日期类Date。能够完成显示日期、调整日期。习题3-5-5请给学校教务管理系统设计一个教师类和一个学生类。其中,教师信息包括教师编号、教师姓名、工资和所属教研室;学生信息包括学号、学生姓名、所属班级和总成绩。然后试引入一个积累,并使用继承来简化设计。精品课件!精品课件!
本文标题:第3章面向对象程序设计
链接地址:https://www.777doc.com/doc-3201689 .html