C#的面向对象程序设计.ppt
《C#的面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《C#的面向对象程序设计.ppt(77页珍藏版)》请在三一办公上搜索。
1、第6章 C#的面向对象程序设计,内容提要:类、对象的概念及使用 方法、属性、索引的概念、声明及调用 构造函数和析构函数的定义 继承和接口的用法 委托和事件的声明及调用目的要求:理解类、对象、构造函数和析构函数的意义 掌握方法、属性、索引的用法 掌握继承和接口、委托和事件的声明及调用重点难点:类、对象、方法、属性、继承、接口、委托和事件,面向对象的程序设计(OOP)的主要思想是将数据及处 理这些数据的操作都封装到一个称为类(Class)的数据结 构中。使用这个类时,只需要定义一个类的变量即可,这 个变量叫做对象(Object)。通过调用对象的数据成员完 成对类的使用。1.类 在面向对象理论中,类
2、(class)就是对具有相同特征的一类事物所做的抽象(或者说,归纳)。,6.1 面向对象程序设计的基本概念,2.对象 类是一种抽象,而对象(object)则是实例(instance),是具体的。如果使用如下格式来代表一个类生成一个对象:类名 对象名;则:电子计算机 ComputerA;电子计算机 ComputerB;就代表ComputerA和ComputerB是“电子计算机”类的 两个不同对象。,3.类的属性 属性说明了这个类的特点。例如“PC计算机”类则可能具备如下属性:计算机的名称 CPU类型 内存容量 硬盘容量 主板型号 显示适配器型号 声卡型号 操作系统类型 通过这些属性,就可以将不同
3、的PC计算机区分开。,4.类的方法 类的方法(method)代表了一类事物所具备的动作,是对属性的操作。比如:“石英钟”类的方法有:秒针前进一格、分秒针 前进一格、时针前进一格等,而“录像机”类所具备的方法 可以有:播放、定格、录像、倒带、快进等。,5.派生和继承 在类的继承中,被继承的类称为基类(又称为父类),由基类继承的类称为派生类(又称为子类)。派生类自动获 得基类的所有属性和方法,而且可以在派生类中添加新的属 性和方法。,6.多态性 多态性是指在一般类中定义的属性或行为,被特殊 类继承之后,可以具有不同数据类型或表现出不同的行 为。就是程序在运行时,会自动判断对象的派生类型,并调用相应
4、的方法。7.封装 封装就是把对象的属性和服务结合成一个独立的系 统单位,并尽可能隐蔽对象的内部细节。,6.2 类和对象 6.2.1 类的声明 类是C#的一种自定义数据类型,其声明格式为:类修饰符 class 类名:基类类名 类的成员;说明:C#支持的类修饰符有:new、public、protected、internal、private、abstract、sealed。,例:定义一个车辆类(有三个变量)class Vehicle public int passengers;/乘客数 public int fuelcap;/所耗燃料 public int mpg;/每公里耗油量,6.2.2 类的成
5、员 类的成员可以分为两大类:类本身所声明的,以及从基类其分为两种:一种不以函数形式体现,称为成员变量;另一种是以函数形式体现,称为成员函数。,1.类成员的访问修饰符(1)public:允许类的内部或外界直接访问;(2)private:不允许外界访问,也不允许派生类 访问,即只能在类的内部访问。如 果没有设定访问修饰符,默认为 private;(3)protected:不允许外界访问,但允许派生类 访问;(4)internal:只有本类的成员才能访问。(5)readonly:该成员的值只能读,不能写。也就 是说,除了赋予初始值外,在程序 的任何一个部分将无法更改这个成 员的值。,class Cl
6、assA public int a;private int b;protected int c;public void SetA()a=1;/正确,允许访问类自身公有成员 b=2;/正确,允许访问类自身私有成员 c=3;/正确,允许访问类自身保护成员 class ClassB:ClassA public void SetB()ClassA BaseA=new ClassA();BaseA.a=5;/正确,允许访问基类公有成员 BaseA.b=23;/错误,不允许访问基类私有成员 BaseA.c=68;/正确,允许访问基类保护成员 class ClassC public void SetB()C
7、lassA BaseA=new ClassA();BaseA.a=5;/正确,允许访问类的其他公有成员 BaseA.b=23;/错误,不允许访问类的其他私有成员 BaseA.c=68;/错误,不允许访问类的其他保护成员,2.静态成员与非静态成员 静态成员是在声明成员时在前面加上static保留字;非静态成员是在声明成员时前面没有static保留字;静态成员属于类所有,非静态成员属于类的对象所有。静态成员的访问格式:类名.静态成员名,若将类中的某个成员声明为static,则该成员称为静态 成员。类中的成员要么是静态的,要么是非静态的。类的非静态成员属于类的实例所有,每创建一个类的 实例都在内存中
8、为非静态成员开辟了一块区域。而类的静 态成员属于类所有,为这个类的所有实例所共享。无论这 个创建了多少个对象(实例),一个静态成员在内存中只 占有一块区域。,例:静态成员的访问using System;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
9、.3 对象的声明 创建类的对象。分两步:(1)先声明对象名 格式:类名 对象名;例:Vehicle minivan;/定义类Vehicle的一个对象(2)创建类的实例。格式:对象名=new 类名();例:minivan=new Vehicle();/创建一个实例 以上两步也可以合并成一步。格式:类名 对象名=new 类名();例:Vehicle minivan=new Vehicle();,6.3 构造函数和析构函数 C#中有两个特殊的函数:构造函数和析构函数。构造函数:当类实例化时首先执行的函数;析构函数:当实例(即对象)从内存中销毁前最后执行 的函数。,6.3.1 构造函数,在C#中,当创
10、建一个对象时,系统首先为这个对象赋予一个标识符,然后给对象分配合适的内存空间,随后系统就自动调用对象的构造函数。构造函数的类型修饰符总是public,因为构造函数主要是在类外创建对象时自动调用。格式:class 类名 public 类名()/构造函数体,例:using System;class MyClass public int x;public Myclass()/类MyClass的构造函数 x=10;class ConsDemo public static void Main()MyClass t1=new MyClass();MyClass t2=new MyClass();Conso
11、le.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()Fruit Orange=new Fruit(“orange”,”round”);/创建Orange实例 Console.WriteLine(“0,1”,Orange.co
12、lor,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);A b=new A(5);Console.WriteLine(count=0,b.count);,运行结果如下:,使用 this关键字 C#中的this关键字是用来代表对象自身。this一般用在构造函数中,以便
13、区别同名的构造函数参数和类成员变量。例:using System;class Point int x,y;public Point(int x,int y)this.x=x;this.y=y;,运行结果如下:,class Test static void Main()Point p=new Point(5,6);Console.WriteLine(x=0,p.x);Console.WriteLine(y=0,p.y);,6.3.2 析构函数,析构函数也是类的特殊的成员函数,它主要用于释放类实例。析构函数的特殊性表现在以下几个方面:(1)析构函数的名字与类名相同,但它前面需要 加一个“”符号;(
14、2)析构函数不能带参数,也没有返回值;(3)当撤消对象时,自动调用析构函数;(4)析构函数不能被继承,也不能被重载。,格式:class 类名 类名()/析构函数体 析构函数以与构造函数相反的顺序被调用。,例:using System;class Decon1 public Decon1()Console.WriteLine(“调用构造函数Decon1”);Decon1()Console.WriteLine(“调用析构函数Decon1”);class Decon2 public Decon2()Console.WriteLine(“调用构造函数Decon2”);Decon2()Console.W
15、riteLine(“调用析构函数Decon2”);class Test public static void Main()Decon1 dec1=new Decon1();Decon2 dec2=new Decon2();,运行结果如下:,可以按照程序代码执行的功能或其他依据把相关的语句组织在一起,并给它们注明相应的名称,利用这种方式把程序分块,就形成了类的方法。方法的功能是通过方法调用实现的。方法调用指定了被调用方法的名字和调用方法所需的信息(参数),调用方法要求被调用方法按照方法参数完成某个任务,并在完成这项任务后由方法返回。如果调用过程出错,则无法完成正常的任务。,6.4 方法,6.4.
16、1 方法的定义及调用,方法是类中用于计算或进行其他操作的成员。类的方法主要用来操作类的数据,提供一种访问数据的途径。1.方法的定义 格式:修饰符 返回值类型 方法名(形式参数列表)方法体各语句;,说明:(1)如果省略“方法修饰符”,该方法为类的私 有成员。(2)“返回类型”指定该方法返回数据的类型,它可以是任何有效的类型。如果方法不需 要返回一个值,其返回类型必须是void。(3)“方法参数列表”是用逗号分隔的类型、标 识符对。这里的参数是形式参数,本质上 是一个变量,它用来在调用方法时接收传 给方法的实际参数值,如果方法没有参 数,那么参数列表为空。,2.从方法返回,一般来说有两种情况将导致
17、方法返回。第一种情况:当碰到方法的结束花括号。第二种情况:执行到return语句。有两种形式的 return:一种用在void方法中(就是那些没有返回值的方法),另一种用在有返回值的方法中。,例:通过方法的结束花括号返回。using System;class Test public void myMeth()int j;for(j=0;j10;j+)if(j%3=0)continue;Console.WriteLine(“0t”,j);static void Main()Test lei=new Test();lei.myMeth();,运行结果如下:,C#允许在一个方法中,有两个或多个ret
18、urn语句,特别是当方法有多个分支时。例:using System;class Test public void myMeth()int j=8;if(j=5)j=j*2;Console.WriteLine(j);return;else j=j*3;Console.WriteLine(j);return;static void Main()Test lei=new Test();lei.myMeth();,运行结果如下:,注意:一个void方法在下述情况之一下将返回程序执行时碰到方法的结束花括号;或者程序执行到一条return语句时。使用下述形式的return语句来从方法返回一个值给调用者。格
19、式:return value;说明:这里value是要从方法中返回的值。,例:用return语句返回值。public int myMeth()int j=8;if(j=5)return j*2;else return j*3;,6.4.2 方法的参数类型 调用方法时,可以给方法传递一个或多个值。传给方法的值叫做实参(argument),在方法内部,接收实参值的变量叫做形参(parameter),形参在紧跟着方法名的括号中声明。形参的声明语法与变量的声明语法一样。形参只在方法内部有效,除了将接收实参的值外,它与一般的变量没什么区别。C#方法的参数类型主要有:值参数、引用参数和输出参数。,1值参数
20、 未用任何修饰符声明的参数为值参数。值参数在调用该参数所属的函数成员时创建,并用调用中给定的实参值初始化。当从该函数返回时值参数被销毁。对值参数的修改不会影响到原自变量。值参数通过复制原自变量的值来初始化。,例:使用值参数。using System;class Test public void Swap(int x,int y)int k;k=x;x=y;y=x;static void Main()int a=8,b=68;Console.WriteLine(a=0,y=1,a,b);Test sw=new Test();sw.Swap(a,b);Console.WriteLine(a=0,y
21、=1,a,b);,程序的运行结果为:a=8,b=68 a=8,b=68,2.引用型参数 用ref修饰符声明的参数为引用参数。引用参数本身并不创建新的存储空间,而是将实参的存储地址传递给形参。可以认为引用参数中就是调用方法时给出的变量,而不是一个新变量。在函数调用中,引用参数必须被赋初值。在调用时,传送给ref参数的必须是变量,类型必须相同,并且必须使用ref修饰。格式:方法修饰符 返回类型 方法名(,ref参数1,ref 参数 2,)方法实现部分;调用方法时,实参前面也必须要加上ref。,例:使用引用参数。using System;class Test public void Swap(ref
22、 int x,ref int y)int k;k=x;x=y;y=x;static void Main()int a=8,b=68;Console.WriteLine(a=0,y=1,a,b);Test sw=new Test();sw.Swap(ref a,ref b);Console.WriteLine(a=0,y=1,a,b);,程序的运行结果为:a=8,b=68 a=68,b=8,3.输出参数 用out修饰符定义的参数称为输出参数。如果希望方法返回 多个值,可使用输出参数。格式:方法修饰符 返回类型 方法名(,out 参数1,out 参数 2,)方法实现部分;调用方法时,实参前面也要加
23、上out。,例:使用输出参数using System;class MyClass public string TestOut(out string i)i=使用out关键字;return out参数;class test static void Main()string x;MyClass app=new MyClass();Console.WriteLine(app.TestOut(out x);Console.WriteLine(x);,运行结果如下:,例:using System;class TestOut/b就是利用out这个输出参数而返回的值 static int OutValue(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面向 对象 程序设计

链接地址:https://www.31ppt.com/p-6502370.html