C#的面向对象程序设计.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C#的面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《C#的面向对象程序设计.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章 C#的面向对象程序设计的面向对象程序设计内容提要:内容提要:类、对象的概念及使用类、对象的概念及使用 方法、属性、索引的概念、声明及调用方法、属性、索引的概念、声明及调用 构造函数和析构函数的定义构造函数和析构函数的定义 继承和接口的用法继承和接口的用法 委托和事件的声明及调用委托和事件的声明及调用目的要求:目的要求:理解类、对象、构造函数和析构函数的意义理解类、对象、构造函数和析构函数的意义 掌握方法、属性、索引的用法掌握方法、属性、索引的用法 掌握继承和接口、委托和事件的声明及调用掌握继承和接口、委托和事件的声明及调用重点难点:重点难点:类、对象、方法、属性、继承、接口、委托和
2、事件类、对象、方法、属性、继承、接口、委托和事件 面向对象的程序设计面向对象的程序设计(OOP)的主要思想是将数据及处的主要思想是将数据及处 理这些数据的操作都封装到一个称为类(理这些数据的操作都封装到一个称为类(Class)的数据结)的数据结 构中。使用这个类时,只需要定义一个类的变量即可,这构中。使用这个类时,只需要定义一个类的变量即可,这 个变量叫做对象(个变量叫做对象(Object)。通过调用对象的数据成员完)。通过调用对象的数据成员完 成对类的使用。成对类的使用。1.类类 在面向对象理论中,类(在面向对象理论中,类(class)就是对具有相同特征就是对具有相同特征的一类事物所做的抽象
3、(或者说,归纳)。的一类事物所做的抽象(或者说,归纳)。6.1 面向对象程序设计的基本概念面向对象程序设计的基本概念 2.对象对象 类是一种抽象,而对象类是一种抽象,而对象(object)则是实例则是实例(instance),是具体的。是具体的。如果使用如下格式来代表一个类生成一个对象:如果使用如下格式来代表一个类生成一个对象:类名类名 对象名;对象名;则:则:电子计算机电子计算机 ComputerA;电子计算机电子计算机 ComputerB;就代表就代表ComputerA和和ComputerB是是“电子计算机电子计算机”类类的的 两个不同对象。两个不同对象。3.类的属性类的属性 属性说明了这
4、个类的特点。属性说明了这个类的特点。例如例如“PC计算机计算机”类则可能具备如下属性:类则可能具备如下属性:计算机的名称计算机的名称 CPU类型类型 内存容量内存容量 硬盘容量硬盘容量 主板型号主板型号 显示适配器型号显示适配器型号 声卡型号声卡型号 操作系统类型操作系统类型 通过这些属性,就可以将不同的通过这些属性,就可以将不同的PC计算机区分开。计算机区分开。4.类的方法类的方法 类的方法(类的方法(method)代表了一类事物所具备的动作,代表了一类事物所具备的动作,是对属性的操作。是对属性的操作。比如:比如:“石英钟石英钟”类的方法有:秒针前进一格、分秒类的方法有:秒针前进一格、分秒针
5、针 前进一格、时针前进一格等,而前进一格、时针前进一格等,而“录像机录像机”类所具备的方类所具备的方法法 可以有:播放、定格、录像、倒带、快进等。可以有:播放、定格、录像、倒带、快进等。5.派生和继承派生和继承 在类的继承中,被继承的类称为基类(又称为父类),在类的继承中,被继承的类称为基类(又称为父类),由基类继承的类称为派生类(又称为子类)。派生类自动获由基类继承的类称为派生类(又称为子类)。派生类自动获 得基类的所有属性和方法,而且可以在派生类中添加新的属得基类的所有属性和方法,而且可以在派生类中添加新的属 性和方法。性和方法。6.6.多态性多态性多态性多态性 多态性是指在一般类中定义的
6、属性或行为,被特殊多态性是指在一般类中定义的属性或行为,被特殊多态性是指在一般类中定义的属性或行为,被特殊多态性是指在一般类中定义的属性或行为,被特殊 类继承之后,可以具有不同数据类型或表现出不同的行类继承之后,可以具有不同数据类型或表现出不同的行类继承之后,可以具有不同数据类型或表现出不同的行类继承之后,可以具有不同数据类型或表现出不同的行 为。就是程序在运行时,会自动判断对象的派生类型,为。就是程序在运行时,会自动判断对象的派生类型,为。就是程序在运行时,会自动判断对象的派生类型,为。就是程序在运行时,会自动判断对象的派生类型,并调用相应的方法。并调用相应的方法。并调用相应的方法。并调用相
7、应的方法。7.7.封装封装封装封装 封装就是把对象的属性和服务结合成一个独立的系封装就是把对象的属性和服务结合成一个独立的系封装就是把对象的属性和服务结合成一个独立的系封装就是把对象的属性和服务结合成一个独立的系 统单位,并尽可能隐蔽对象的内部细节统单位,并尽可能隐蔽对象的内部细节统单位,并尽可能隐蔽对象的内部细节统单位,并尽可能隐蔽对象的内部细节。6.2 类和对象类和对象 6.2.1 类的声明类的声明 类是类是C#的一种自定义数据类型,其声明格式为:的一种自定义数据类型,其声明格式为:类修饰符类修饰符 class 类名类名:基类类名:基类类名 类的成员;类的成员;说明:说明:C#支持的类修饰
8、符有:支持的类修饰符有:new、public、protected、internal、private、abstract、sealed。例:定义一个车辆类(有三个变量)例:定义一个车辆类(有三个变量)class Vehicle public int passengers;/乘客数乘客数 public int fuelcap;/所耗燃料所耗燃料 public int mpg;/每公里耗油量每公里耗油量 6.2.2 类的成员类的成员 类的成员可以分为两大类:类本身所声明的,以及类的成员可以分为两大类:类本身所声明的,以及从基类其分为两种:从基类其分为两种:一种不以函数形式体现,称为成员变量;一种不以函
9、数形式体现,称为成员变量;另一种是以函数形式体现,称为成员函数。另一种是以函数形式体现,称为成员函数。1.类成员的访问修饰符类成员的访问修饰符 (1)public:允许类的内部或外界直接访问;允许类的内部或外界直接访问;(2)private:不允许外界访问,也不允许派生类不允许外界访问,也不允许派生类 访问,即只能在类的内部访问。如访问,即只能在类的内部访问。如 果没有设定访问修饰符,默认为果没有设定访问修饰符,默认为 private;(3)protected:不允许外界访问,但允许派生类不允许外界访问,但允许派生类 访问;访问;(4)internal:只有本类的成员才能访问。只有本类的成员才
10、能访问。(5)readonly:该成员的值只能读,不能写。也就:该成员的值只能读,不能写。也就 是说,除了赋予初始值外,在程序是说,除了赋予初始值外,在程序 的任何一个部分将无法更改这个成的任何一个部分将无法更改这个成 员的值。员的值。class ClassA public int a;private int b;protected int c;public void SetA()a=1;/正确,允许访问类自身公有成员正确,允许访问类自身公有成员 b=2;/正确,允许访问类自身私有成员正确,允许访问类自身私有成员 c=3;/正确,允许访问类自身保护成员正确,允许访问类自身保护成员 class
11、ClassB:ClassA public void SetB()ClassA BaseA=new ClassA();BaseA.a=5;/正确,允许访问基类公有成员正确,允许访问基类公有成员 BaseA.b=23;/错误,不允许访问基类私有成员错误,不允许访问基类私有成员 BaseA.c=68;/正确,允许访问基类保护成员正确,允许访问基类保护成员 class ClassC public void SetB()ClassA BaseA=new ClassA();BaseA.a=5;/正确,允许访问类的其他公有成员正确,允许访问类的其他公有成员 BaseA.b=23;/错误,不允许访问类的其他私
12、有成员错误,不允许访问类的其他私有成员 BaseA.c=68;/错误,不允许访问类的其他保护成员错误,不允许访问类的其他保护成员 2.静态成员与非静态成员静态成员与非静态成员 静态成员是在声明成员时在前面加上静态成员是在声明成员时在前面加上static保留字;保留字;非静态成员是在声明成员时前面没有非静态成员是在声明成员时前面没有static保留字;保留字;静态成员属于类所有,非静态成员属于类的对象所有。静态成员属于类所有,非静态成员属于类的对象所有。静态成员的访问格式:静态成员的访问格式:类名类名.静态成员名静态成员名 若将类中的某个成员声明为若将类中的某个成员声明为static,则该成员称
13、为,则该成员称为静态静态 成员成员。类中的成员要么是静态的,要么是非静态的。类中的成员要么是静态的,要么是非静态的。类的类的非静态非静态成员属于类的实例所有,每创建一个类的成员属于类的实例所有,每创建一个类的 实例都在内存中为非静态成员开辟了一块区域。而类的静实例都在内存中为非静态成员开辟了一块区域。而类的静 态成员属于类所有,为这个类的所有实例所共享。无论这态成员属于类所有,为这个类的所有实例所共享。无论这 个创建了多少个对象(实例),一个静态成员在内存中只个创建了多少个对象(实例),一个静态成员在内存中只 占有一块区域。占有一块区域。例:静态成员的访问例:静态成员的访问using Syst
14、em;class Myclass public int nIndex=10;static public double fphi=45.6;class classTest static void Main()int a=Myclass.nIndex;/错误,因为错误,因为nIndex是非是非静态成员静态成员 double b=Myclass.fphi;/正确,因为正确,因为fphi是静态是静态成员成员 Console.Write(b);6.2.3 对象的声明对象的声明 创建类的对象。分两步:创建类的对象。分两步:(1)先声明对象名)先声明对象名 格式:格式:类名类名 对象名;对象名;例:例:Ve
15、hicle minivan;/定义类定义类Vehicle的一个对象的一个对象 (2)创建类的实例。)创建类的实例。格式:对象名格式:对象名=new 类名类名();例:例:minivan=new Vehicle();/创建一个实例创建一个实例 以上两步也可以合并成一步。以上两步也可以合并成一步。格式:格式:类名类名 对象名对象名=new 类名类名();例:例:Vehicle minivan=new Vehicle();6.3 构造函数和析构函数构造函数和析构函数 C#C#C#C#中有两个特殊的函数:构造函数和析构函数。中有两个特殊的函数:构造函数和析构函数。中有两个特殊的函数:构造函数和析构函数
16、。中有两个特殊的函数:构造函数和析构函数。构造函数构造函数构造函数构造函数:当类实例化时首先执行的函数;:当类实例化时首先执行的函数;:当类实例化时首先执行的函数;:当类实例化时首先执行的函数;析构函数析构函数析构函数析构函数:当实例(即对象)从内存中销毁前最后执行:当实例(即对象)从内存中销毁前最后执行:当实例(即对象)从内存中销毁前最后执行:当实例(即对象)从内存中销毁前最后执行 的函数。的函数。的函数。的函数。6.3.1 6.3.1 构造函数构造函数构造函数构造函数 在在C#中,当创建一个对象时,系统首先为这个对中,当创建一个对象时,系统首先为这个对象赋予一个标识符,然后给对象分配合适的
17、内存空间,象赋予一个标识符,然后给对象分配合适的内存空间,随后系统就自动调用对象的构造函数。随后系统就自动调用对象的构造函数。构造函数的类型修饰符总是构造函数的类型修饰符总是public,因为构造函数,因为构造函数主要是在类外创建对象时自动调用。主要是在类外创建对象时自动调用。格式:格式:class 类名类名 public 类名类名()/构造函数体构造函数体 例:例:using System;class MyClass public int x;public Myclass()/类类MyClass的构造函数的构造函数 x=10;class ConsDemo public static void
18、 Main()MyClass t1=new MyClass();MyClass t2=new MyClass();Console.WriteLine(“0t1”,t1.x,t2.x);运行结果如下:运行结果如下:构造函数也可以带参数。构造函数也可以带参数。例:例:using System;class Fruit public string color;public string shape;public Fruit(string c,string s)/类类Fruit的构造函数的构造函数 color=c;shape=s;class Test public static void Main()F
19、ruit Orange=new Fruit(“orange”,”round”);/创建创建Orange实例实例 Console.WriteLine(“0,1”,Orange.color,Orange.shape);运行结果如下:运行结果如下:构造函数也可以重载。构造函数也可以重载。例:例:using System;class A public int count;public A()count=-1;public A(int n)count=n;class Test static void Main()A a=new A();Console.WriteLine(count=0,a.count)
20、;A b=new A(5);Console.WriteLine(count=0,b.count);运行结果如下:运行结果如下:使用使用 this关键字关键字 C#中的中的this关键字是用来代表对象自身。关键字是用来代表对象自身。this一般用在构造函数中,一般用在构造函数中,以便区别同名的构造函数参数和类成员变量。以便区别同名的构造函数参数和类成员变量。例:例:using System;class Point int x,y;public Point(int x,int y)this.x=x;this.y=y;运行结果如下:运行结果如下:class Test static void Main
21、()Point p=new Point(5,6);Console.WriteLine(x=0,p.x);Console.WriteLine(y=0,p.y);6.3.2 析构函数析构函数 析构函数也是类的特殊的成员函数,它主要用析构函数也是类的特殊的成员函数,它主要用于释放类实例。于释放类实例。析构函数的特殊性表现在以下几个方面:析构函数的特殊性表现在以下几个方面:(1)析构函数的名字与类名相同,但它前面需)析构函数的名字与类名相同,但它前面需要要 加一个加一个“”符号;符号;(2)析构函数不能带参数,也没有返回值;)析构函数不能带参数,也没有返回值;(3)当撤消对象时,自动调用析构函数;)当
22、撤消对象时,自动调用析构函数;(4)析构函数不能被继承,也不能被重载。)析构函数不能被继承,也不能被重载。格式:格式:class 类名类名 类名类名()/析构函数体析构函数体 析构函数以与构造函数相反的顺序被调用。析构函数以与构造函数相反的顺序被调用。例:例:using System;class Decon1 public Decon1()Console.WriteLine(“调用构造函数调用构造函数Decon1”);Decon1()Console.WriteLine(“调用析构函数调用析构函数Decon1”);class Decon2 public Decon2()Console.Write
23、Line(“调用构造函数调用构造函数Decon2”);Decon2()Console.WriteLine(“调用析构函数调用析构函数Decon2”);class Test public static void Main()Decon1 dec1=new Decon1();Decon2 dec2=new Decon2();运行结果如下:运行结果如下:可以按照程序代码执行的功能或其他依据把相关的可以按照程序代码执行的功能或其他依据把相关的语句组织在一起,并给它们注明相应的名称,利用这种语句组织在一起,并给它们注明相应的名称,利用这种方式把程序分块,就形成了类的方法。方式把程序分块,就形成了类的方法
24、。方法的功能是通过方法调用实现的。方法调用指定方法的功能是通过方法调用实现的。方法调用指定了被调用方法的名字和调用方法所需的信息(参数),了被调用方法的名字和调用方法所需的信息(参数),调用方法要求被调用方法按照方法参数完成某个任务,调用方法要求被调用方法按照方法参数完成某个任务,并在完成这项任务后由方法返回。如果调用过程出错,并在完成这项任务后由方法返回。如果调用过程出错,则无法完成正常的任务。则无法完成正常的任务。6.4 方法方法6.4.1 方法的定义及调用方法的定义及调用 方法是类中用于计算或进行其他操作的成员。类的方方法是类中用于计算或进行其他操作的成员。类的方法主要用来操作类的数据,
25、提供一种访问数据的途径。法主要用来操作类的数据,提供一种访问数据的途径。1.方法的定义方法的定义 格式:格式:修饰符修饰符 返回值类型返回值类型 方法名(形式参数列表)方法名(形式参数列表)方法体各语句;方法体各语句;说明:说明:说明:说明:(1 1)如果如果如果如果省略省略省略省略“方法修饰符方法修饰符方法修饰符方法修饰符”,该方法为类的私该方法为类的私该方法为类的私该方法为类的私 有成员。有成员。有成员。有成员。(2 2)“返回类型返回类型返回类型返回类型”指定该方法返回数据的类型,指定该方法返回数据的类型,指定该方法返回数据的类型,指定该方法返回数据的类型,它可以是任何有效的类型。如果方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面向 对象 程序设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内