第3章面向对象程序设计.ppt





《第3章面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《第3章面向对象程序设计.ppt(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章 C#面向对象程序设计面向对象程序设计 v学习内容与要点学习内容与要点 类的创建与使用类的继承与多态接口创建与实现泛型创建与实现委托与事件3.1 类类v在面向对象程序设计中,类被作为一种数据结构,在面向对象程序设计中,类被作为一种数据结构,是包含数据成员、函数成员和嵌套类型的数据结构。是包含数据成员、函数成员和嵌套类型的数据结构。v类声明类声明 属性属性 类修饰符类修饰符 class 类名类名类体类体 类修饰符包括类修饰符包括new、public、protected、internal、private、abstract和和sealed。例例3-1 定义一个定义一个Person类类例例
2、定义一个定义一个Person类类using System;public class Personprivate string name;private int age;private long ID;public Person(string n,int a,long i)name=n;age=a;ID=i;public virtual void Display()Console.WriteLine(“Name:0”,name);Console.WriteLine(“Age:0”,age);Console.WriteLine(“ID:0”,ID);创建类实例创建类实例 v格式为:格式为:类名类名
3、 实例名实例名=new 类名(参数)类名(参数);v两种形式两种形式Person myTest=new Person();或或Person myTest;myTest=new Person();类成员类成员 v类成员分为两大类,类本身定义的成员和从类成员分为两大类,类本身定义的成员和从基类继承来的成员。基类继承来的成员。v类成员包括函数成员和数据成员。类成员包括函数成员和数据成员。1类成员访问修饰符类成员访问修饰符v访问修饰符用于指定类成员的可访问性。访问修饰符用于指定类成员的可访问性。v共有共有public、private、protected和和internal四个类成员访问修饰符。四个类成
4、员访问修饰符。2静态成员与实例成员静态成员与实例成员v当用当用static修饰符声明成员时,得到静态成员,修饰符声明成员时,得到静态成员,静态成员属于类,为这个类的所有实例所共静态成员属于类,为这个类的所有实例所共享享v不用不用static修饰符声明的成员,称为实例成员,修饰符声明的成员,称为实例成员,实例成员被类的实例所拥有。实例成员被类的实例所拥有。例例3-2 定义一个含有静态成员定义一个含有静态成员v定义一个含有静态成员定义一个含有静态成员和一个实例成员的和一个实例成员的student类。类。using System;class Studentint SNO;/实例成员,表示学生学号实例
5、成员,表示学生学号static int count;/静态成员,计数学生人数静态成员,计数学生人数public Student(int s)SNO=s;count+;public void display()Console.WriteLine(count=0,SNO=1,count,SNO);class TestStudentpublic static void Main()Student s1=new Student(12);s1.display();Student s2=new Student(20);s2.display();构造函数和析构函数构造函数和析构函数 v构造函数用于为对象分配
6、空间,完成初始化工作。构造函数用于为对象分配空间,完成初始化工作。构造函数特殊性表现在:构造函数特殊性表现在:构造函数的名字必须与类名相同;构造函数可以带参数,但没有返回值;构造函数在对象定义时被自动调用;如果没有给类定义构造函数,则编译系统会自动生成一个缺省的构造函数,其形式如下:public con():base()构造函数可以被重载,但不可以被继承。v实例构造函数用于创建和初始化实例,创建实例构造函数用于创建和初始化实例,创建新对象时要调用实例构造函数,其格式为:新对象时要调用实例构造函数,其格式为:访问修饰符访问修饰符 类名(形参列表)类名(形参列表)函数体函数体 v静态构造函数用于初
7、始化静态数据,或用于静态构造函数用于初始化静态数据,或用于执行仅需执行一次的特定操作。在创建第一执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调个实例或引用任何静态成员之前,将自动调用静态构造函数。其格式为:用静态构造函数。其格式为:static 类名()类名()函数体函数体 v析构函数主要用于释放类实例。析构函析构函数主要用于释放类实例。析构函数特殊性表现在:数特殊性表现在:析构函数的名字与类名相同,但它前面加析构函数的名字与类名相同,但它前面加一个一个“”符号;符号;析构函数不能够带参数,也没有返回值;析构函数不能够带参数,也没有返回值;当撤销对象时,自动调用析
8、构函数;当撤销对象时,自动调用析构函数;析构函数不能被继承,也不能被重载。析构函数不能被继承,也不能被重载。例例3-3 使用构造函数和析构函数使用构造函数和析构函数例例 使用构造函数和析构函数使用构造函数和析构函数using System;class Complexdouble imag,real;public Complex()/无参数构造函数无参数构造函数/有两个参数的构造函数有两个参数的构造函数public Complex(double r,double i)imag=i;real=r;Complex()/析构函数析构函数方法方法 v方法是表现类或对象行为的成员函数。方法是表现类或对象行
9、为的成员函数。1.方法声明方法声明v声明格式:声明格式:方法修饰符方法修饰符 返回类型返回类型 方法名(形参列表)方法名(形参列表)方法体方法体 v修饰符包括:修饰符包括:new、public、protected、internal、private、static、virtual、sealed、override、abstract和和extern。2.方法参数方法参数(1)值参数)值参数未用任何修饰符声明的参数为值参数。未用任何修饰符声明的参数为值参数。(2)引用参数)引用参数用用ref修饰符声明的参数为引用参数。在方法中对引修饰符声明的参数为引用参数。在方法中对引用参数的任何更改都会反映给实参。用
10、参数的任何更改都会反映给实参。(3)输出参数)输出参数用用out修饰符声明的参数称为输出参数。如果希望修饰符声明的参数称为输出参数。如果希望函数返回多个值,可使用输出参数。函数返回多个值,可使用输出参数。例例3-4 使用使用值参数值参数例例 使用值参数使用值参数using System;class TestValuestatic void Swap(int a,int b)int t;t=a;a=b;b=t;static void Main()int x=10,y=20;Console.WriteLine(x=0,y=1,x,y);Swap(x,y);Console.WriteLine(x=0
11、,y=1,x,y);例例3-5 使用使用引用参数引用参数例例 使用引用参数使用引用参数using System;class TestValuestatic void Swap(ref int a,ref int b)int t;t=a;a=b;b=t;static void Main()int x=10,y=20;Console.WriteLine(x=0,y=1,x,y);Swap(ref x,ref y);Console.WriteLine(x=0,y=1,x,y);例例3-6 使用使用输出参数输出参数例例 使用输出参数使用输出参数using System;class TestOut st
12、atic int OutMultiValue(int a,out char b)b=(char)a;return 0;static void Main()int t=65,r;char m;r=OutMultiValue(t,out m);Console.WriteLine(r=0,m=1”,r,m);(4)参数数组)参数数组v用用params修饰符声明的变量称为参数数组,修饰符声明的变量称为参数数组,它允许向函数传递个数变化的参数。它允许向函数传递个数变化的参数。例例3-7 使用使用参数数组参数数组例例 使用参数数组使用参数数组using System;class TestParams st
13、atic void MutiParams(params int var)for(int i=0;i var.Length;i+)Console.WriteLine(“var0=1”,i,vari);static void Main()int arr=10,20,30;MutiParams(arr);/有有3个参数,参数为一维数个参数,参数为一维数组组MutiParams(100,200);/有有2个参数个参数MutiParams();/没有参数没有参数3.静态方法和实例方法静态方法和实例方法v用用static修饰符声明的方法为静态方法,它不修饰符声明的方法为静态方法,它不与实例相关联,它属于类
14、。只需要类名和方与实例相关联,它属于类。只需要类名和方法名就可调用静态方法法名就可调用静态方法v未用未用static修饰符声明的方法为实例方法。它修饰符声明的方法为实例方法。它与特定实例相关联。可以用与特定实例相关联。可以用this来访问该实来访问该实例。实例方法可以访问类中的任何成员。例。实例方法可以访问类中的任何成员。例例3-8 使用静态方法和实例方法使用静态方法和实例方法例例 使用静态方法和实例方法使用静态方法和实例方法using System;class TestMethodstatic int x;/静态数据成员静态数据成员int y;/非静态数据成员非静态数据成员static vo
15、id A()/静态方法静态方法Ax=10;/正确,在静态方法中访问静态成员正确,在静态方法中访问静态成员y=20;/错误,在静态方法中访问非静态成员错误,在静态方法中访问非静态成员void B()x=10;/正确,在实例方法中访问静态成员正确,在实例方法中访问静态成员y=20;/正确,在实例方法中访问非静态成员正确,在实例方法中访问非静态成员static void Main()TestMethod t=new TestMethod();TestMethod.A();/使用类名调用静态方法使用类名调用静态方法t.B();/使用实例调用实例方法使用实例调用实例方法4.方法重载方法重载v它允许一个类
16、中有同名的方法存在它允许一个类中有同名的方法存在v为了区分这些同名方法,要求方法有不同的为了区分这些同名方法,要求方法有不同的参数,要么参数个数不同,要么参数类型不参数,要么参数个数不同,要么参数类型不同。同。例例3-9 使用方法使用方法重载重载例例 使用方法重载使用方法重载using System;class TestMethodint square(int x)return x*x;double square(double x)return x*x;decimal square(decimal x)return x*x;static void Main()TestMethod t=new
17、TestMethod();Console.WriteLine(“The squre is 0,1,2”,t.square(10),t.square(12.34),t.square(123.456m);5.运算符重载运算符重载v运算符重载可以对运算符重载可以对C#中已有的运算符赋予新中已有的运算符赋予新的功能。其格式为:的功能。其格式为:public static 返回值类型返回值类型 operator unary-operator(参数列表参数列表)方法体方法体例例3-10 重载重载Point类的和运算类的和运算符符例例3-10 重载重载Point类的和运算符类的和运算符using Syste
18、m;class Pointprivate int x,y;public Point(int a,int b)x=a;y=b;public static Point operator+(Point p)p.x+;p.y+;return p;public void Display()Console.WriteLine(Point.x=0,Point.y=1,x,y);public static Point operator+(Point p1,Point p2)Point p=new Point(0,0);p.x=p1.x+p2.x;p.y=p1.y+p2.y;return p;static vo
19、id Main(string args)Point a=new Point(10,20);Point b=new Point(30,40);a=a+b;a.Display();a+;a.Display();6.this关键字关键字vthis 关键字引用类的当前实例,成员通过关键字引用类的当前实例,成员通过this关键字可以知道自己属于哪一个实例。关键字可以知道自己属于哪一个实例。this关键字是一个隐含引用,它隐含于每个关键字是一个隐含引用,它隐含于每个类的成员函数中。类的成员函数中。vthis 的常用用途:的常用用途:限定被相似的名称隐藏的成员 将对象作为参数传递到其他方法 声明索引器 字段
20、与属性字段与属性 1.字段字段v字段表示与对象或类相关联的变量。字段表示与对象或类相关联的变量。v静态字段:用静态字段:用static修饰符声明的字段,无论存在修饰符声明的字段,无论存在多少个类实例,它们都共享一个静态字段拷贝。多少个类实例,它们都共享一个静态字段拷贝。v实例字段:没用实例字段:没用static修饰符声明的字段,类的每修饰符声明的字段,类的每个实例都包含实例字段的一个拷贝。个实例都包含实例字段的一个拷贝。v只读字段:用只读字段:用readonly修饰符声明的字段,它只修饰符声明的字段,它只能在字段声明或构造函数中赋值,在其它任何地能在字段声明或构造函数中赋值,在其它任何地方都不
21、能改变只读字段的值。方都不能改变只读字段的值。例例3-11 使用字段使用字段例例 使用字段使用字段using System;class Goodspublic double high;public readonly double width=30;public static int count =0;public Goods(double h,double w)high=h;width=w;count+;static void Main(string args)Goods y=new Goods(100,200);Console.WriteLine(high=0,width=1,count=2
22、“,y.high,y.width,Goods.count);Goods z=new Goods(300,400);Console.WriteLine(high=0,width=1,count=2“,z.high,z.width,Goods.count);2.属性属性v属性用于刻画对象的特征或表示对象的状态,它提供属性用于刻画对象的特征或表示对象的状态,它提供对类或对象性质的访问。对类或对象性质的访问。v其格式为:其格式为:访问修饰符访问修饰符 数据类型数据类型 属性名属性名get get访问器代码块访问器代码块set set访问器代码块访问器代码块 v set访问器:给属性赋值,它使用访问器:
23、给属性赋值,它使用value设置属性的值设置属性的值vget访问器:获取属性值,它通过访问器:获取属性值,它通过return返回属性的值。返回属性的值。v如果只有如果只有get访问器,表示是只读属性;如果只有访问器,表示是只读属性;如果只有set访问器,表示只写属性;如果既有访问器,表示只写属性;如果既有get访问器,也有访问器,也有set访问器,表示读写属性。访问器,表示读写属性。例例3-12 使用属性使用属性例例 使用属性使用属性class Windowprivate double m_width=30;public double widthget return m_width;set m
24、_width=value;static void Main(string args)Window y=new Window();y.width=200;Console.WriteLine(The width of window is 0.,y.width);继承继承 v继承是面向对象程序设计的一个重要特征,继承是面向对象程序设计的一个重要特征,它允许在既有类的基础上创建新类,新类从它允许在既有类的基础上创建新类,新类从既有类中继承类成员,而且可以重新定义或既有类中继承类成员,而且可以重新定义或加进新的成员,从而形成类的层次或等级。加进新的成员,从而形成类的层次或等级。v一般称被继承的类为基类或
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计

限制150内