C#第6章面向对象程序设计.ppt
《C#第6章面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《C#第6章面向对象程序设计.ppt(73页珍藏版)》请在三一办公上搜索。
1、第6章面向对象程序设计,6.1 面向对象程序设计概述6.2 命名空间6.3 类6.4 对象6.5 构造函数和析构函数6.6 静态成员 6.7 属性6.8 方法 6.9 索引器6.10 委托6.11 事件6.12 运算符重载6.13 类的转换,6.1 面向对象程序设计概述,6.1.1 面向对象的基本概念 类和对象 属性、方法和事件 封装 继承 重载与重写,6.1.2 面向对象的优点 维护简单。可扩充性。代码重用。,6.2 命名空间,6.2.1 命名空间概述 在.NET中,类是通过命名空间(namespace)来组织的。命名空间提供了可以将类分成逻辑组的方法,将系统中的大量类库有序地组织起来,使得
2、类更容易使用和管理。可以将命名空间想像成文件夹,类的文件夹就是命名空间,不同的命名空间内,可以定义许多类。在每个命名空间下,所有的类都是“独立”且“唯一”的。,6.2.2 使用命名空间 在C#中,使用命名空间有两种方式,一种是明确指出命名空间的位置,另一种是通过using关键字引用命名空间。直接定位在应用程序中,任何一个命名空间都可以在代码中直接使用。例如:System.Console.WriteLine(ABC);这个语句是调用了System命名空间中Console类的WriteLine方法。1)使用using关键字 在应用程序中要使用一个命名空间,还可以采取引用命名空间的方法,在引用后,应
3、用程序中就可使用该命名空间内的任一个类了。引用命名空间的方法是利用using关键字,其使用格式如下:using 别名=命名空间或 using 别名=命名空间.成员,2)自定义命名空间 在C#中,除了使用系统的命名空间外,还可以在应用程序中自已声明命名空间。其使用语法格式如下:namespace命名空间名称 命名空间定义体 其中,“命名空间名称”指出命名空间的唯一名称,必须是有效的C#标识符。例如,在应用程序中自定义Ns1命名空间:namespace Ns1 class A class B,6.3类,6.3.1类的声明类的声明语法格式如下:类的修饰符 class 类名:基类名/类的成员;,例如,
4、以下声明了一个Person类:public class Personpublic int pno;/编号 public string pname;/姓名public void setdata(int no,string name)pno=no;pname=name;public void dispdata()Console.WriteLine(0 1,pno,pname);,6.3.2类的成员,6.3.3 分部类分部类可以将类(结构或接口等)的声明拆分到两个或多个源文件中。若要拆分类的代码,被拆分类的每一部分的定义前边都要用partial关键字修饰。分部类的每一部分都可以存放在不同的文件中,编
5、译时会自动将所有部分组合起来构成一个完整的类声明。,6.4对象,6.4.1 定义类的对象一旦声明了一个类,就可以用它作为数据类型来定义类对象(简称为对象)。定义类的对象分以下两步:1)定义对象引用其语法格式如下:类名 对象名;例如,以下语句定义Person类的对象引用p:Person p;2)创建类的实例其语法格式如下:对象名=new 类名();例如,以下语句创建Person类的对象实例:p=new Persone();,以上两步也可以合并成一步。其语法格式如下:类名 对象名=new 类名();例如:Person p=new Person();,理解对象引用和类实例的区别。,两个对象引用可以引
6、用同一个对象,例如:Person p1=new Person();Person p2=p1;,6.4.2 访问对象的字段访问对象字段的语法格式如下:对象名.字段名其中,“.”是一个运算符,该运算符的功能是表示对象的成员。例如,前面定义的p对象的成员变量表示为:p.pno,p.pname,6.4.3 调用对象的方法调用对象的方法的语法格式如下:对象名.方法名(参数表)例如,调用前面定义的p对象的成员方法setdata为:p.setxy(101,Mary);,【例6.1】设计一个控制台应用程序,说明调用对象方法的过程。,using System;namespace Proj6_1public cl
7、ass TPoint/声明类TPoint int x,y;/类的私有字段 public void setpoint(int x1,int y1)x=x1;y=y1;public void dispoint()Console.WriteLine(0,1),x,y);class Program static void Main(string args)TPoint p1=new TPoint();/定义对象p1 p1.setpoint(2,6);Console.Write(第一个点=);p1.dispoint();TPoint p2=new TPoint();/定义对象p2 p2.setpoint
8、(8,3);Console.Write(第二个点=);p2.dispoint();,6.5 构造函数和析构函数,6.5.1构造函数1.什么是构造函数 构造函数是在创建给定类型的对象时执行的类方法。构造函数具有如下性质:构造函数的名称与类的名称相同。构造函数尽管是一个函数,但没有任何类型,即它既不属于返回值函数也不属于void函数。一个类可以有多个构造函数,但所有构造函数的名称都必须相同,它们的参数各不相同,即构造函数可以重载。当类对象创建时,构造函数会自动地执行;由于它们没有返回类型,因此不能像其他函数那样进行调用。当类对象声明时,调用哪一个构造函数取决于传递给它的参数类型。构造函数不能被继承
9、。,2.调用构造函数当定义类对象时,构造函数会自动执行。1)调用默认构造函数 不带参数的构造函数称为默认构造函数。无论何时,只要使用new运算符实例化对象,并且不为new提供任何参数,就会调用默认构造函数。假设一个类包含有默认构造函数,调用默认构造函数的语法如下:类名 对象名=new 类名();如果没有为对象提供构造函数,则默认情况下 C#将创建一个构造函数,该构造函数实例化对象,并将所有成员变量设置为相应的默认值。2)调用带参数的构造函数 假设一个类中包含有带参数的构造函数,调用这种带参数的构造函数的语法如下:类名 对象名=new 类名(参数表);,【例6.2】设计一个控制台应用程序,说明调
10、用构造函数的过程。,namespace Proj6_2 class Program public class TPoint1/声明类TPoint1 int x,y;/类的私有变量 public TPoint1()/默认的构造函数 public TPoint1(int x1,int y1)/带参数的构造函数 x=x1;y=y1;public void dispoint()Console.WriteLine(0,1),x,y);static void Main(string args)TPoint1 p1=new TPoint1();/调用默认的构造函数 Console.Write(第一个点=);
11、p1.dispoint();TPoint1 p2=new TPoint1(8,3);/调用带参数的构造函数 Console.Write(第二个点=);p2.dispoint();,6.5.2析构函数 1.什么是析构函数 在对象不再需要时,希望确保它所占的存储空间能被收回。C#中提供了析构函数用于专门释放被占用的系统资源。析构函数具有如下性质:析构函数在类对象销毁时自动执行。一个类只能有一个析构函数,而且析构函数没有参数,即析构函数不能重载。析构函数的名称是“”加上类的名称(中间没有空格)。与构造函数一样,析构函数也没有返回类型。析构函数不能被继承。,2.调用析构函数当一个对象被系统销毁时自动调
12、用类的析构函数。,【例6.3】设计一个控制台应用程序,说明调用析构函数的过程。,using System;namespace Proj6_3 class Program public class TPoint2/声明类TPoint2 int x,y;public TPoint2(int x1,int y1)/带参数的构造函数 x=x1;y=y1;TPoint2()Console.WriteLine(点=(0,1),x,y);static void Main(string args)TPoint2 p1=new TPoint2(2,6);TPoint2 p2=new TPoint2(8,3);,
13、6.6 静态成员,6.6.1 静态字段 静态字段是类中所有对象共享的成员,而不是某个对象的成员,也就是说静态字段的存储空间不是放在每个对象中,而是和方法一样放在类公共区中。对静态字段的操作和一般字段一样,定义为私有的静态字段不能被外界访问。静态字段的使用方法如下:(1)静态字段的定义与一般字段相似,但前面要加上static关键词。(2)在访问静态字段时采用如下格式:类名.静态字段名,6.6.2 静态方法 静态方法与静态字段类似,也是从属于类,都是类的静态成员。只要类存在,静态方法就可以使用,静态方法的定义是在一般方法定义前加上static关键字。调用静态方法的格式如下:类名.静态方法名(参数表
14、);注意:静态方法只能访问静态字段、其他静态方法和类以外的函数及数据,不能访问类中的非静态成员(因为非静态成员只有对象存在时才有意义)。但静态字段和静态方法可由任意访问权限许可的成员访问。,6.7属性,6.7.1什么是属性 属性描述了对象的具体特性,它提供了对类或对象成员的访问。C#中的属性更充分地体现了对象的封装性,属性不直接操作类的字段,而是通过访问器进行访问。,6.7.2属性声明 属性在类模块里是采用下面的方式进行声明的,即指定变量的访问级别、属性的类型、属性的名称,然后是get访问器或者set访问器代码块。其语法格式如下:修饰符 数据类型 属性名称 get访问器 set访问器 其中,修
15、饰符有new、public、protected、internal、private、static、virtual、override和abstract。,【例6.7】设计一个控制台应用程序,说明属性的使用。,using System;namespace Proj6_7 public class TPoint3/声明类TPoint3 int x,y;public int px get/get访问器 return x;set/set访问器 x=value;public int py get/get访问器 return y;set/set访问器 y=value;class Program static
16、void Main(string args)TPoint3 p=new TPoint3();p.px=3;p.py=8;/属性写操作 Console.WriteLine(点=(0,1),p.px,p.py);/属性读操作,点=(3,8),6.8 方法,6.8.1 什么是方法 方法包含一系列的代码块。从本质上来讲,方法就是和类相关联的动作,是类的外部界面。用户可以通过外部界面来操作类的私有字段。,6.8.2 方法的定义定义方法的基本格式如下:修饰符 返回类型 方法名(参数列表)/方法的具体实现;,6.8.3 方法的返回值 方法可以向调用方返回某一个特定的值。如果返回类型不是void,则该方法可以
17、用return关键字来返回值,return 还可以用来停止方法的执行。例如,以下类MyClass3中的addnum方法用return关键字来返回值:public class MyClass3 int num=0;public int addnum(int num1)return num+num1;,6.8.4 方法的参数 方法中的参数是保证不同的方法间互动的重要桥梁,方便用户对数据的操作。C#中方法的参数有4种类型。1.值参数 不含任何修饰符,当利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改内存中实参的值,所以使用值参数时可以保证实际值的安
18、全性。在调用方法时,如果形参的类型是值参数的话,调用的实参的表达式必须保证是正确的值表达式。例如,前面MyClass3类中addnum方法中的参数就是值参数。,2.引用型参数 以ref修饰符声明的参数属引用型参数。引用型参数本身并不创建新的存储空间,而是将实参的存储地址传递给形参,所以对形参的修改会影响原来实参的值。在调用方法前,引用型实参必须被初始化,同时在调用方法时,对应引用型参数的实参也必须使用ref修饰。例如:,public class MyClass4 int num=0;public void addnum(int num1,ref int num2)num2=num+num1;c
19、lass Program static void Main(string args)int x=0;MyClass4 s=new MyClass4();s.addnum(5,ref x);Console.WriteLine(x);/输出:5,3.输出参数 以out修饰符声明的参数属输出参数。与引用型参数类似,输出型参数也不开辟新的内存区域。它与引用型参数的差别在于,调用方法前无需对变量进行初始化。输出型参数用于传递方法返回的数据,out修饰符后应跟随与形参的类型相同的类型,用来声明在方法返回后传递的变量经过了初始化。例如:,public class MyClass5 int num=0;pub
20、lic void addnum(int num1,out int num2)num2=num+num1;class Program static void Main(string args)int x;MyClass5 s=new MyClass5();s.addnum(5,out x);Console.WriteLine(x);/输出:5,4.数组型参数 以params修饰符声明的参数属数组型参数。params关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字。有数组型参数就不能再有ref 和
21、out修饰符。例如:,public class MyClass6 int num=10;public void addnum(ref int sum,params int b)sum=num;foreach(int item in b)sum+=item;class Program static void Main(string args)int a=new int3 1,2,3;int x=0;MyClass6 s=new MyClass6();s.addnum(ref x,a);Console.WriteLine(x);,6.8.5 方法的重载 方法的重载是指调用同一方法名,但是使用不同的
22、数据类型参数或者次序不一致的参数。只要一个类中有两个以上的同名方法,且使用的参数类型或者个数不同,编译器就可以判断在哪种情况下调用哪种方法了。为此,C#中引入了成员签名的概念。成员签名包含成员的名称和参数列表,每个成员签名在类型中必须是唯一的,只要成员的参数列表不同,成员的名称可以相同。如果同一个类有两个或多个这样的成员(方法、属性、构造函数等),它们具有相同的名称和不同的参数列表,则称该同类成员进行了重载,但它们的成员签名是不同的。例如,下面的代码实现了MethodTest方法的重载(假设都是某个类的成员),它们是不同的成员签名:,public int MethodTest(int i,in
23、t j)/重载方法1/代码public int MethodTest(int i)/重载方法2/代码public string MethodTest(string sr)/重载方法3/代码,6.9 索引器,6.9.1 什么是索引器 索引器提供了一种访问类或结构的方法,即允许按照与数组相同的方式对类、结构或接口进行索引。它的引入是为了使程序更加直观、易于理解。例如,可以有一个大学名称类University,其中有一个name数组字段可能包含一些大学名称,un是该类的一个对象,类中索引器允许访问这些大学名称,例如:un0=清华大学;un1=北京大学;un3=武汉大学;,6.9.2 定义索引器 要声
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面向 对象 程序设计

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