第4章 面向对象编程基础.ppt

上传人:qwe****56 文档编号:80597909 上传时间:2023-03-23 格式:PPT 页数:37 大小:325KB
返回 下载 相关 举报
第4章 面向对象编程基础.ppt_第1页
第1页 / 共37页
第4章 面向对象编程基础.ppt_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《第4章 面向对象编程基础.ppt》由会员分享,可在线阅读,更多相关《第4章 面向对象编程基础.ppt(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1 1第第4 4章章 面向对象的编程基础面向对象的编程基础 4.1 4.1 类类4.2 4.2 结构结构4.3 4.3 方法方法4.4 4.4 属性与索引器属性与索引器2 24.1 4.1 类类类与与对象象类:一:一组具有相同数据具有相同数据结构和相同操作的构和相同操作的对象的集合。象的集合。例如例如:汽汽车对象(象(实例):例):类的的实例化例化。例如。例如:卡卡车注意:注意:要使用要使用对象,必象,必须先定先定义类,然后再,然后再创建建对象。象。对象的生存周期象的生存周期对象在建立象在建立时分配了内存,分配了内存,创建建对象象实际上作了两个方面的工作上作了两个方面的工作:(1)使用)使用n

2、ew保留字要求系保留字要求系统分配内存;分配内存;(2)使用构造函数初始化数据。)使用构造函数初始化数据。销毁对象也是做了两个方面的工作:象也是做了两个方面的工作:(1)释放占用的内存;放占用的内存;(2)将分配)将分配给对象的内存象的内存归还给堆(堆(Heap)。)。3 34.1 4.1 类的组织类的组织1.类的声明的声明用用class定定义类,声明,声明类的形式的形式为:附加声明附加声明访问修修饰符符class类名称名称:基基类,接口序列,接口序列字段声明字段声明构造函数构造函数方法方法事件事件 注意注意:中的内容可省或任中的内容可省或任选其一选其一,当两者都有时当两者都有时,先基先基类后

3、接口类后接口4 44.1 4.1 类的组织(续)类的组织(续)publicclassChildprivateintage;privatestringname;/不不带参数的构造函数参数的构造函数publicChild()name=none;/带参数的构造函数参数的构造函数publicChild(stringname,intage)如果不指明,则如果不指明,则默认为默认为privateprivate5 54.1 4.1 类的组织(续)类的组织(续)this.name=name;this.age=age;/输出方法出方法publicvoidPrintChild()Console.WriteLine

4、(0,1yearsold.,name,age);publicclassProgram6 64.1 4.1 类的组织(续)类的组织(续)publicstaticvoidMain()/使用使用new关关键字字创建建对象,象,new后是后是调用的构造函数用的构造函数Childchild1=newChild(ZhangSan,11);Childchild2=newChild(LiSi,10);Childchild3=newChild();/显示示结果果Console.Write(Child#1:);child1.PrintChild();Console.Write(Child#2:);child2.P

5、rintChild();Console.Write(Child#3:);child3.PrintChild();7 74.1 4.1 类的组织(续)类的组织(续)Console.ReadLine();输出出结果:果:Child#1:ZhangSan,11yearsold.Child#2:LiSi,10yearsold.Child#3:none,0yearsold.8 84.1.2 4.1.2 构造函数构造函数作用:作用:构造函数是一个特殊的方法,用于在建立构造函数是一个特殊的方法,用于在建立对象象时进行初始化的行初始化的动作。作。好好处:确保每一个确保每一个对象在被使用之前都适当地象在被使用之

6、前都适当地进行了初始化行了初始化的的动作。作。构造函数特点:构造函数特点:1)每个每个类至少有一个构造函数。若程序代至少有一个构造函数。若程序代码中没有构造函数中没有构造函数则系系统会自会自动提供一个默提供一个默认的构造函数。的构造函数。2)一个构造函数一个构造函数总是和它的是和它的类名相同。名相同。3)构造函数不包含任何返回构造函数不包含任何返回值。4)构造函数构造函数总是是public的。的。一般在构造函数中作初始化工作,一般在构造函数中作初始化工作,对于于执行行过程用程用时比比较长的程序代的程序代码,最好不要放在构造函数中。,最好不要放在构造函数中。9 94.1.2 4.1.2 构造函数

7、(续)构造函数(续)1、默、默认构造函数构造函数(1)如果在)如果在类中不定中不定义构造函数,系构造函数,系统会提供一个默会提供一个默认的构的构造函数。造函数。(2)默)默认构造函数没有参数。构造函数没有参数。(3)默)默认构造函数自构造函数自动将非静将非静态成成员初始化初始化为:数数值型型:如如int、double等,初始化等,初始化为0。bool类型:初始化型:初始化为false.引用引用类型:初始化型:初始化为null。(4)如果自己定)如果自己定义了了类的构造函数,的构造函数,则所有初始化工作由所有初始化工作由编程者自己完成。程者自己完成。10104.1.2 4.1.2 构造函数(续)

8、构造函数(续)2.重重载构造函数构造函数有有时候可能会遇到候可能会遇到这样的情况:在一个的情况:在一个类中的多个方法中中的多个方法中都要用到某一个数据成都要用到某一个数据成员,而,而该成成员值必必须从其他从其他类中中传递过来。来。这时,无参数的构造函数就不能,无参数的构造函数就不能胜任了,解决任了,解决这个个问题最好的最好的办法就是:重法就是:重载(Overloading)构造函数。)构造函数。11114.1.2 4.1.2 构造函数(续)构造函数(续)usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceO

9、verloadingExampleclassProgrampublicProgram()Console.WriteLine(null);12124.1.2 4.1.2 构造函数(续)构造函数(续)publicProgram(stringstr)Console.WriteLine(str);staticvoidMain()Programaa=newProgram();Programbb=newProgram(Howareyou!);Console.ReadLine();13134.1.3 4.1.3 字段和局部变量字段和局部变量字段字段:指声明指声明为类一一级的的对象或象或值类型的型的变量。量。

10、局部局部变量量:指在方法、事件以及构造函数内声明的指在方法、事件以及构造函数内声明的变量。量。publicclassProgrampublicstaticintj=20;/字段字段publicstaticvoidMain()intj=30;/局部局部变量量Console.WriteLine(j);/输出出结果:果:30Console.WriteLine(Program.j);/输出出结果:果:20Console.ReadLine();14144.1.3 4.1.3 字段和局部变量字段和局部变量当字段和局部当字段和局部变量名相同量名相同时,如果要引用静,如果要引用静态字段,可以字段,可以使用下面

11、的形式:使用下面的形式:类名名.字段名字段名如果是如果是实例字段,例字段,则使用下面的形式:使用下面的形式:this.字段名字段名这里的里的this指当前指当前实例。例。当然,如果没有出当然,如果没有出现字段和局部字段和局部变量名重名的情况,引用量名重名的情况,引用字段的形式和引用局部字段的形式和引用局部变量的形式相同。量的形式相同。15154.1.4 4.1.4 静态成员与实例成员静态成员与实例成员类的成的成员包括字段、属性、构造函数、方法、事件、索引、嵌包括字段、属性、构造函数、方法、事件、索引、嵌套套类。类的成的成员分静分静态成成员和和实例成例成员静静态成成员在内存中只有一份在内存中只有

12、一份静静态成成员要等到要等到应用程序用程序结束束时才会退出内存。才会退出内存。把只有把只有创建了建了类的的实例才能例才能够使用的成使用的成员叫叫实例成例成员。16164.1.5 4.1.5 访问修饰符访问修饰符C#中有以下成中有以下成员访问修修饰符:符:Public(常用)(常用)任何外部的任何外部的类都可以不受限制的存取都可以不受限制的存取这个个类的方法和数据成的方法和数据成员。private(常用)(常用)类中的所有方法和数据成中的所有方法和数据成员只能在此只能在此类中使用,外部无法存取。中使用,外部无法存取。(默默认)Protected除了除了让本身的本身的类可以使用之外,任何可以使用之

13、外,任何继承自此承自此类的子的子类都可以存取。都可以存取。Internal在当前在当前项目中都可以存取。目中都可以存取。该访问权限一般用于基于限一般用于基于组件的开件的开发,因,因为它可以使它可以使组件以私有方式工作,而件以私有方式工作,而该项目外的其它代目外的其它代码无法无法访问。Protectedinternal只限于当前只限于当前项目,或者从目,或者从该项目的目的类继承的承的类才可以存取。才可以存取。Partial局部局部类型,型,类的定的定义和和实现可以分布在多个文件中,但都要使用可以分布在多个文件中,但都要使用partial标注,基注,基类只需要声明一次,若多次声明只需要声明一次,若

14、多次声明则必必须完全一致。完全一致。17174.2 4.2 结构结构结构(构(struct)是由一系列相关的、但是由一系列相关的、但类型不一定相同的型不一定相同的变量量组织在一起而构成的数据表示形式,所有在一起而构成的数据表示形式,所有结构构类型都型都隐式地式地从从类型型object继承。承。例如:例如:publicstructPointpublicintx;publicinty;publicstrings;结构和构和类的区的区别与与联系:系:结构构类型是型是值类型,型,类类型是引用型是引用类型。型。凡是定凡是定义为结构的,都可以用构的,都可以用类来定来定义。创建建轻量量级对象象时,可以使用,

15、可以使用结构。构。18184.3 4.3 方法方法方方法法(Method)是是一一组程程序序代代码的的集集合合,每每个个方方法法都都有有一一个个方法名,便于方法名,便于识别和和让其他方法其他方法调用。用。1.方法的定方法的定义与使用与使用(1)方法必)方法必须放在某个放在某个类中。中。(2)定)定义方法的方法的语法形式法形式为:访问修修饰符符 返回返回值类型型 方法名称(参数序列)方法名称(参数序列)语句序列句序列 19194.3 4.3 方法(续)方法(续)定定义方法方法时,需要注意以下几点:,需要注意以下几点:方法名不能和方法名不能和变量、常数或者任何声明在量、常数或者任何声明在类中其它的

16、成中其它的成员相同。相同。方法可以有参数,也可以没有参数,但是不方法可以有参数,也可以没有参数,但是不论是否有参数,小是否有参数,小括号都是必需的。如果参数序列中的参数有多个,括号都是必需的。如果参数序列中的参数有多个,则以逗号分以逗号分开。开。结束某个方法的束某个方法的执行,可以使用行,可以使用return语句,程序遇到句,程序遇到return语句后,会将句后,会将执行流程交行流程交还给调用此方法的程序代用此方法的程序代码段。此外段。此外,还可以用可以用return语句返回一个句返回一个值。如果声明一个非如果声明一个非void类型的方法,型的方法,则方法中必方法中必须至少有一个至少有一个re

17、turn语句。句。20204.3 4.3 方法(续)方法(续)usingSystem;classProgrampublicintMyMethod()Console.WriteLine(thisisMyMethod.);inti=10;returni;staticvoidMain()Programmethod=newProgram();intj=5;j=method.MyMethod();Console.WriteLine(thevalueis0.,j);21214.3 4.3 方法方法2.方法中的参数方法中的参数传递1)传递值类型的参数型的参数 值类型参数的格式型参数的格式为:参数参数类型型参

18、数名参数名classProgrampublicstaticvoidAddOne(inta)a+;staticvoidMain()inta=3;Console.WriteLine(调用用AddOne之前,之前,a=0,a);AddOne(a);Console.WriteLine(调用用AddOne之后,之后,a=0,a);Console.ReadLine();22224.3 4.3 方法(续)方法(续)2)传递引用引用类型的参数型的参数引用引用类型参数的格式型参数的格式为:ref参数参数类型型参数参数classProgrampublicstaticvoidAddOne(refinta)a+;st

19、aticvoidMain()inta=3;Console.WriteLine(调用用AddOne之前,之前,a=0,a);AddOne(refa);Console.WriteLine(调用用AddOne之后,之后,a=0,a);Console.ReadLine();23234.3 4.3 方法(续)方法(续)3)输出多个引用出多个引用类型的参数型的参数 输出引用出引用类型参数的格式型参数的格式为:out参数参数类型型参数名参数名classProgrampublicstaticvoidMyMethod(outinta,outintb)a=5;b=6;staticvoidMain()intx,y;

20、MyMethod(outx,outy);Console.WriteLine(调用用MyMethod之后,之后,x=0,y=1,x,y);Console.ReadLine();2424RefRef参数传递与参数传递与OutOut参数传递异同点参数传递异同点相同点:相同点:都是都是传递引用引用类型的参数,型的参数,编译器器处理理时没有区没有区别不同点:不同点:Ref参数使用前必参数使用前必须要初始化要初始化Out参数使用前不必初始化参数使用前不必初始化注意:注意:publicvoidAddOne(refintx)public voidAddOne(out int x)上面上面这两个方法,不是重两个

21、方法,不是重载方法方法。25254.3 4.3 方法(续)方法(续)4)传递个数不确定的参数个数不确定的参数 需要需要传递的参数个数不确定的参数个数不确定时,可以采用,可以采用params关关键字,字,其后一般跟一个数其后一般跟一个数组。例如:例如:classProgrampublicstaticfloatAverage(paramslongv)longtotal,i;for(i=0,total=0;i0)number=value;/value是关是关键字,其字,其值由由编译器自器自动生成。生成。30304.4.1 4.4.1 属性(续)属性(续)publicclassProgrampubli

22、cstaticvoidMain()MyClassme=newMyClass();Console.WriteLine(me.MyNumber);me.MyNumber=5;Console.WriteLine(me.MyNumber);Console.ReadLine();3131/MyClass.csusingSystem;namespaceConsoleTestclassMyClassprivateintnumber;publicintNumbergetreturnnumber;setif(value0)number=value;/Program.cs/Program.csusing Syst

23、em;using System;namespace ConsoleTestnamespace ConsoleTest public class Program public class Program public static void Main()public static void Main()MyClass me=new MyClass me=new MyClass();MyClass();me.Number=-1;me.Number=-1;Console.WriteLine(Console.WriteLine(Number:0,Number:0,me.Number);me.Numbe

24、r);Console.ReadLine();Console.ReadLine();回答:回答:NumberNumber输出的值是多少?输出的值是多少?32324.4.2 4.4.2 索引器索引器索引器用于封装内部集合或数索引器用于封装内部集合或数组。索引器在索引器在语法上方便了程序法上方便了程序员将将类、结构或接口作构或接口作为数数组进行行访问。要声明要声明类或或结构上的索引器,需要使用构上的索引器,需要使用this关关键字。字。例如:例如:publicintthisintindex/索引器声明索引器声明/getandsetaccessors33334.4.2 4.4.2 索引器索引器【例例4

25、-12】索引器的声明和用法。索引器的声明和用法。3434本章相关面试题本章相关面试题选择题选择题1.以下关于以下关于ref和和out的描述哪些的描述哪些项是正确的?是正确的?(多多选)A.使用使用ref参数,参数,传递到到ref参数的参数必参数的参数必须最先初始化。最先初始化。B.使用使用out参数,参数,传递到到out参数的参数必参数的参数必须最先初始化。最先初始化。C.使用使用ref参数,必参数,必须将参数作将参数作为ref参数参数显式式传递到方法。到方法。D.使用使用out参数,必参数,必须将参数作将参数作为out参数参数显式式传递到方法。到方法。ACD2.下列关于构造函数的描述正确的是

26、(下列关于构造函数的描述正确的是(单选)a)构造函数可以声明返回构造函数可以声明返回类型。型。b)构造函数不可以用构造函数不可以用private修修饰c)构造函数必构造函数必须与与类名相同名相同d)构造函数不能构造函数不能带参数参数C3535读程序写出运行结果读程序写出运行结果classClass1privatestringstr=Class1.str;privateinti=0;staticvoidStringConvert(stringstr)str=stringbeingconverted.;staticvoidStringConvert(Class1c)c.str=stringbein

27、gconverted.;staticvoidAdd(inti)i+;staticvoidAddWithRef(refinti)i+;staticvoidMain()inti1=10;inti2=20;stringstr=str;Class1c=newClass1();Add(i1);AddWithRef(refi2);Add(c.i);StringConvert(str);StringConvert(c);Console.WriteLine(i1);Console.WriteLine(i2);Console.WriteLine(c.i);Console.WriteLine(str);Console.WriteLine(c.str);3636运行结果为:运行结果为:10 21 0 str string being converted.3737本章作业本章作业P79页 1、2、4继续完成完成实验三三

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com