第4、5讲 面向对象编程基础

上传人:zhan****gclb 文档编号:231697193 上传时间:2023-09-06 格式:PPT 页数:51 大小:834KB
收藏 版权申诉 举报 下载
第4、5讲 面向对象编程基础_第1页
第1页 / 共51页
第4、5讲 面向对象编程基础_第2页
第2页 / 共51页
第4、5讲 面向对象编程基础_第3页
第3页 / 共51页
资源描述:

《第4、5讲 面向对象编程基础》由会员分享,可在线阅读,更多相关《第4、5讲 面向对象编程基础(51页珍藏版)》请在装配图网上搜索。

1、第第4 4、5 5讲讲面向面向面向面向对对象程序象程序象程序象程序设计设计基基基基础础 *本章任务能正确理解类与对象的概念能使用方法能正确在方法之间传递信息*类和对象类和对象 类:类是C#程序设计的基本单位相对对象而言,类似于蓝图包含方法和数据对象:是类的实例使用关键字 new 创建对象具有行为对象对象厨房厨房起居室起居室浴室浴室书房书房饭厅饭厅储藏室储藏室门廊门廊类类*类和对象类和对象先有对象还是先有类?类是对象的模板,使用对象前必须先创建类类是对象的模板,使用对象前必须先创建类-.Net公共类库中包含大量预先定义好的类-在创建windows应用程序项目时,系统总是自动生成一个Form1类,

2、程序的入口Main方法是该类的一个静态方法。-在windows应用程序运行时,将在main方法中创建一个Form1类的实例*.NET中的类和对象中的类和对象在Visual Studio IDE环境中,工具箱中的控件是被图形文字化的可视化类,当把这些对象添加到窗体设计器上时,即由类创建了对象。类本质上是一种数据类型*定义类访问修饰符访问修饰符 class 类名类名 访问修饰符访问修饰符常量声明;常量声明;访问修饰符访问修饰符字段声明;字段声明;访问修饰符访问修饰符方法声明;方法声明;访问修饰符访问修饰符属性声明;属性声明;访问修饰符访问修饰符构造函数声明;构造函数声明;访问修饰符访问修饰符析构函

3、数声明;析构函数声明;说明:说明:使用类声明可以创建新的类。类声明以一个声明头开始,其组使用类声明可以创建新的类。类声明以一个声明头开始,其组成方式如下:先是指定类的特性或者修饰符,后跟类的名字,成方式如下:先是指定类的特性或者修饰符,后跟类的名字,它由一组包含在大括号(它由一组包含在大括号()中的成员声明组成)中的成员声明组成。例如例如:定义:定义rectangle 类:类:public class rectangle /定义类定义类 public double length;/定义字段定义字段 public double width;/定义字段定义字段 *类的修饰符类的修饰符public(

4、公有类):表示外界可以不受限制地对该类访问;private(私有类):表示只有本类才能访问;protected(保护类):表示只能对其所在类和从该类派生的子类进行访问;internal(内部类):表示仅能访问本程序;abstract(抽象类):说明该类可以用来做其他类的基类,可以继承但不能单独使用;Scaled(密封类):说明该类不能作为其他类的基类,不能派生新的类;省略类修饰符则表示为private。*1将类实例化为对象对象对象2类成员的访问 =new();例如:例如:rectangle rec1=new rectangle();对象名对象名.数据数据例如:例如:rec1.length;*对

5、类名推荐使用Pascal命名规范:每个单词的首字母要大写。创建并初始化对象属性属性 访问修饰符访问修饰符 class ;=new();总结定义类*类成员在类的定义中,包含有各种类成员,概括起来类的成员有两种:存储数据的成员存储数据的成员与操作数据的成员操作数据的成员。存储数据的成员叫“字段”,操作数据成员又有很多种。“字段”是类定义中的数据,也叫类的变量。“属性”用于读取和写入“字段”值。“方法”实质上就是函数,通常用于对字段进行计算和操作,即对类中的数据进行操作,以实现特定的功能。“构造函数”是在用类声明对象时,完成对象字段的初始化工作。*字段为类中的成员,是表示与对象或类关联的变量,字段常

6、定义的类型有public(公有型)、private(私有型)等。字段例如:例如:class triangle /定义类定义类public string name;/字段成员字段成员public double sideA;/字段成员字段成员public double sideB;/字段成员字段成员public double sideC;/字段成员字段成员*加上static保留字为静态成员,没有这个保留字的为非静态成员。区别:静态成员属于类所有,非静态成员属于类的对象所有,因此访问静态成员只能由类来访问,而访问非静态成员必须由对象进行访问。静态字段静态字段的访问格式静态字段的访问格式:类名类名.静

7、态成员名静态成员名非静态字段的访问格式:对象名非静态字段的访问格式:对象名.非静态成员名非静态成员名*class Teacher public string number=1001;/非静态字段 public string name=张宁;/非静态字段 public static double pay=3650.5;/静态字段static void Main(string args)Teacher t1=new Teacher();string str=职工编号:+t1.number+,姓名:+t1.name+,工资:+Teacher.pay.ToString();Console.WriteL

8、ine(str);例如:number和name为非静态字段,pay为静态字段,因此访问前面两个字段用对象调用t1.number和t1.name,访问最后一个字段用类来调用Teacher.pay。*类的方法表示一类事物所具备的动作,在C#中就是类或对象为完成一项任务而执行的指令序列。在编写程序中使用方法主要是便于修改、增加可读性,方法可以重用和封装。方法方法*编写方法编写方法前的准备工作:该方法主要是实现什么功能?根据功能起一个容易记的方法名。实现该方法需要用户提供什么数据?确定方法的参数。如计算n!,就需要给该方法传入一个整数n。该方法是实现操作或是计算?若是操作,方法的返回类型可以定为voi

9、d若是计算,需要确定需要给调用者返回一个什么类型的结果。如求n!需要给调用者返回一个长整型的阶乘值。方法的最后一个执行语句应当是:(若是操作可以省略)return 表达式;*编写方法编写方法前的准备工作:该方法可以给哪些人使用:public:所有人都可以使用private:只能给本类使用protected:可以给本类和派生类使用方法要写在类(class)中。*编写方法方法定义的格式 方法修饰符方法修饰符 返回值类型方法名返回值类型方法名(形参列表形参列表)方法体方法体 l方法修饰符是可选的。它可以是方法修饰符是可选的。它可以是public,private,protected 等之一。等之一。默

10、认为默认为private。l方法名要符合标识符的命名规则。方法名要符合标识符的命名规则。l参数的声明和变量一样,即参数的声明和变量一样,即 类型名类型名 参数名参数名 的格式,用于接收调的格式,用于接收调用者传过来的数值,也相当于方法的局部变量。多个参数之间用用者传过来的数值,也相当于方法的局部变量。多个参数之间用逗号分隔。逗号分隔。*任务任务3:根据圆的半径计算:根据圆的半径计算圆面积圆面积任务描述:任务描述:输入圆半径单击“计算”按钮,显示圆面积。*需要定义Circle类自定义方法Area()需要根据参数r计算面积任务任务3:根据圆的半径计算圆面积:根据圆的半径计算圆面积*代码代码/定义C

11、ircle类 public class Circle public const double PI=3.14159;public double r;public double Area(double r)this.r=r;/this.r表示类的字段,r表示方法Area的形参 double s=PI*this.r*this.r;return s;返回面积返回面积传入半径传入半径*代码代码/修改“计算”按钮,在其Click事件处理程序 private void btnCompute_Click(object sender,EventArgs e)Circle circle1=new Circle(

12、);double r=double.Parse(txtR.Text );/将实参r中的值传递给方法area中的形参r double s=circle1.Area(r);string res=园半径是:+circle1.r+厘米,面积是:+s.ToString()+平方厘米;txtResult.Text=res;*方法参数按值传递 public double Area(double r)double s=double s=circle1.Area(r);circle1.Area(r);方法的声明方法的调用方法的调用调用者调用者area方法方法11.511.5*使用以下代码,调用上述方法,结果是什

13、么?使用以下代码,调用上述方法,结果是什么?public double Area(double r,double s)this.r=r;s=PI*this.r*this.r;return s;double a=0;Circle circle1=new Circle();double r=double.Parse(txtR.Text);double s=circle1.Area(r,a);string res=半径是:+circle1.r+厘米,面积是:+s.ToString()+平方厘米,+a的值是:+a;txtResult.Text=res;方法参数按值传递值传递*使用以下代码,调用上述方法

14、,结果是什么?使用以下代码,调用上述方法,结果是什么?public double Area(double r,ref ref double s)this.r=r;s=PI*this.r*this.r;return s;double a=0;/必须初始化 Circle circle1=new Circle();double r=double.Parse(txtR.Text);double s=circle1.Area(r,refref a);string res=园半径是:+circle1.r+厘米,面积是:+s.ToString()+平方厘米,+a的值是:+a;txtResult.Text=r

15、es;通过引用传递引用传递参数如果要传递原值并修改它,使用引用参数就非常方便。在传递时变量必须被初始化。*public double area(double r,public double area(double r,outout double s)double s)this.r=r;this.r=r;s=PI*this.r*this.r;s=PI*this.r*this.r;return s;return s;double a;/double a;/不必初始化不必初始化Circle circle1=new Circle();Circle circle1=new Circle();double

16、 r=double r=double.Parse(txtR.Textdouble.Parse(txtR.Text ););double s=circle1.area(r,double s=circle1.area(r,outout a);a);string res=string res=园园半半径径是:是:+circle1.r+circle1.r+厘米,面厘米,面积是:是:+s.ToStrings.ToString()+()+平方厘米,平方厘米,+a+a的的值是:是:+a;+a;通过引用传递引用传递参数 在参数前面加一个out关键字,可将该参数设置成一个输出参数,输出参数用来返回一个结果,不必

17、先初始化。*方法的重载方法重载,就是声明两个以上的同名方法,实现对不同数据类型的相同处理。两点基本要求:1)重载的方法名称必须相同。2)重载的方法,其形参个数或类型必须不同。*例:public void swap(ref int a,ref int b)public void swap(ref float a,ref float b)public void swap(ref float a)系统会根据参数的类型或个数,寻求最匹配的方法予以调用。方法的重载*编译器通过识别方法的签名来区分调用哪个方法。方法的签名包括方法名、参数的类型、个数和顺序对以下重载的方法,编译器能够正确识别:对以下方法,编

18、译器无法识别,会报错:方法的重载public void Foo(int a,float b)public void Foo(float a,int b)public void Foo(int a,int b)public void Foo(int b,int a)*方法的重载*属性属性,从外部属性,从外部(类的使用者类的使用者)来看,类似于类的字段。从内部来看,类似于类的字段。从内部(类的作者类的作者)来看,类似来看,类似于类的方法。于类的方法。class Triangle Private double sideA;public double SideA /定义SideA属性 get retu

19、rn sideA;set sideA=value;get访问器访问器set访问器访问器*属性是一种用于访问类或对象性质的成员,它与字段不同的是属性不表示存储位置,不直接操作类的数据内容,而是通过访问器进行访问。使用属性可以像使用公共数据成员一样,这样既可以使类中数据被轻松访问,又可以避免随意访问类中公共数据而出现的安全性问题,提高了程序安全可靠性,充分体现了对象的封装性。属性属性*如果只提供 get访问器,那么这个属性是只读的。如果只提供 set访问器,那么这个属性是只写的。建议:将所有字段都定义为private。如果字段需要公开,请使用属性将其公开。属性*属性的访问方法与类的字段成员的访问方

20、法一样,根据属性声明时是否为静态有下列两种访问形式。非静态属性成员访问:对象名.属性名 静态属性成员访问:类名.属性名属性的使用属性的使用*属性的使用属性的使用 /创建对象 Triangle tri1=new Triangle();s1=double.Parse(txtSideA.Text);s2=double.Parse(txtSideB.Text);s3=double.Parse(txtSideC.Text);/使用属性set访问器写入数据 tri1.SideA=s1;tri1.SideB=s2;tri1.SideC=s3;/使用属性get访问器读取数据 txtRes.Text=三角形三边

21、长分别为:+tri1.SideA+厘米、+tri1.SideB+厘米和+tri1.SideC+厘米。;*构造函数是特殊的方法,用来实现对象的初始化与类同名没有返回值构造函数用于,当实例化一个对象时,会对类的成员进行初始化。构造函数*如果我们想使对象初始化时,可以按照设计者的预期来进行,就需要自己书写构造函数的代码。若Triangle类,我们想初始化三边长是0,构造函数可以定义为:class Triangle public Triangle(double sA)/构造函数 sideA=sideB=sideC=sA;Triangle tri1=new Triangle(0);构造函数的定义*cla

22、ss Triangle private double sideA;private double sideB;private double sideC;public Triangle()/系统默认构造函数 public Triangle(double sA)/构造函数 sideA=sideB=sideC=sA;构造函数的重载*当没有构造函数时,.NET会提供一个默认空的构造函数。如上例中的Triangle类,会有一个默认构造函数:public Triangle()/系统默认构造函数 编译器只会当类中没有构造函数时,提供一个默认构造函数。但是若提供了其它版本的构造函数,而没有提供默认构造函数,将不

23、能调用默认构造函数。构造函数的重载*例如上例中没有定义 public Triangle()就不能这样去实例化对象:Triangle tri1=new Triangle();构造函数的重载*析构函数析构函数也是类的特殊方法,主要用于释放类的实例。析构函数的名字与类名相同,但它的前面需要加一个“”符号;与构造函数不同的是析构函数不能带参数,也没有返回值;当撤消对象时,自动调用析构函数;析构函数不能被继承,也不能被重载。析构函数声明格式:类名称()语句块 例如:class Round public Round()/构造函数 public Round(int r)this.r=r;/构造函数重载 Ro

24、und()/析构函数 Console.WriteLine(Round()is release);*面向对象编程的重要特性有:封装、继承和多态。封装性封装性是指将数据与对数据的操作作为一个整体,以类的形式进行定义,这种机制叫做“封装”。继承性继承性是指在类之间建立一种关系,即在基类的基础上建立新的类称为派生类,使得新定义的派生类可以继承基类的成员,还可以定义新的成员,建立起类的新层次。多态性多态性是指在类中定义了功能不同但名称相同的方法或属性,通过在类中声明虚拟方法和属性,在派生类中重写这些方法成员的实现,使得调用名称相同的方法成员所执行的操作可能不同,展示出类的多态性。继承与多态*类的继承派生

25、类声明格式:Class 派生类名:基类名 语句块1派生类与基类 派生类是从基类中继承成员,并且添加新成员或重新定义成员,一般称被继承的类为基类或父类,继承后产生的新类称为派生类或子类。基类中构造函数和析构函数不能被派生类继承,其它成员都能被继承。即:派生类具有父类所有的公共属性和方法。*派生类2基类成员修饰符 基类成员修饰符可为public、protected、private其含义如下:public:访问该成员不受任何限制,可以被基类和派生类访问,也可以被外部代码访问。protected:访问该成员仅限于包含它的类和派生类,外部代码不能访问。private:该成员仅限于包含它的类,不能被派生类

26、和外部代码访问。如果不涉及继承,则private和protected没有区别.*C#中类继承规则派生类只能继承于一个基类。派生类自然继承基类的成员,但不能继承基类的构造函数。基类中的成员声明时,不管是什么访问控制方式,总能被子类继承。访问控制方式只决定了派生类成员是否能访问基类成员。类的继承可以传递,Object类是所有类的基类。*派生类是对基类的扩展,可以声明新的成员,但不能消除已继承的基类成员。派生类定义中,如果声明了与基类同名的成员,则基类中同名的成员将被覆盖。C#中类继承规则*public class Person private string name;/人物都有姓名 private

27、 char sex;/人物都有性别 private int age;/人物都有年龄 public Person()public Person(string name,char sex,int age)this.Name=name;this.Sex=sex;this.Age=age;/以下都是封装字段,为了数据的安全;public string Name get return name;set this.name=value;*public char Sex get return sex;set this.sex=value;public int Age get return age;set t

28、his.age=value;/定义方法,比如吃饭 public void Eat()Console.WriteLine(Name+正在吃饭!);*/派生类(子类)public class ZhangSan:Person public ZhangSan()/这时,张三这个类就有了父类的公共属性和方法 public ZhangSan(string name,char sex,int age)this.Name=name;this.Sex=sex;this.Age=age;ZhangSan zs=new ZhangSan(张三,男,20);zs.Eat();/测试*虚拟方法和重写方法1虚拟方法 派生

29、类继承了基类方法,如果在派生类中需要用到与基类相同方法名,但方法执行的操作内容不同时,则需要“重写”它们,即重写方法成员的实现。在基类中声明方法时用virtual关键字来修饰,表示此方法为虚拟方法,用virtual声明的方法可以在派生类中重写。虚拟方法声明中不能包含static、abstract、override修饰符。在声明方法时没有用virtual关键字的,该方法为非虚拟方法。非虚拟方法的执行是不变的,不管方法在它声明的类的实例中,还是在派生类的实例中被调用,执行都是相同的。*虚拟方法和重写方法2重写方法 重写方法就是在派生类中用相同的名称重写基类继承的虚拟方法,也就是在派生类中重新定义此

30、虚拟方法的实现,在声明方法时用override关键字来修饰,表示该方法为重写方法。虚拟方法的执行可以被派生类重写后改变,具体实现时要求重写方法的方法名、返回值类型、参数表中的参数个数、类型顺序都必须与基类中的虚拟方法完全一致。在方法声明中不能有new、static、virtual修饰符。*抽象类和抽象成员1抽象类 在类声明中用abstract关键字进行修饰,表明此类只能是其他类的基类,称为抽象类。在类中含有一个或一个以上的抽象成员的类必须声明为抽象类,抽象类也可以包含非抽象类成员,当类中一个抽象类成员都没有的情况下,也可以将该类声明为抽象类。抽象类是为了提供一个比较合适的类,由此派生出其他的类,它不能实例化,而是在派生类中实现它不能实例化,而是在派生类中实现。2抽象成员 抽象类中包含的抽象成员可以是抽象属性和抽象方法,声明时都用abstract关键字进行修饰,表示该属性和方法未实现,其中抽象方法没有方法体,但必须声明,在它的派生类中通过重写提供实现。*

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!