版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章面向对象编程基础,本章要点,通过本章的学习,使读者:了解并掌握类的概念和定义方法掌握类的实例对象的创建和使用方法了解并掌握构造函数的定义和使用方法理解和掌握方法的参数传递和方法的重载了解静态方法与实例方法的区别及特点,1,5.2类,5.2.1类的声明类是C#的一种自定义数据类型,其声明格式为:属性类修饰符class类名字段声明构造函数方法属性,2,classPersonprivatestringname;privateintage;privatelongID;publicPerson(stringn,inta,longi)name=n;age=a;ID=i;publicvoidDispl
2、ay()Console.WriteLine(Name:0,name);Console.WriteLine(Age:0,age);Console.WriteLine(Name:0,ID);,【例5-1】声明一个Person类,包含姓名、年龄和身份证号。,3,5.2.2创建类实例,类实例创建格式:类名实例名=new类名(参数);例如,创建Person类的实例:PersonmyTest1=newPerson(“张三”,21,60012);也可以分两步创建Person类的实例:PersonmyTest2;MyTest2=newPerson(“张三”,21,60012);,(1)myTest1和myTe
3、st2都是类Person的实例化,分配了两块不同的存储空间。但它们的结构相同。(2)myTest1和myTest2就可以分别访问各自类中的公有类型数据或成员函数。,4,5.2.3类成员,类成员包括数据成员和函数成员。,数据成员包括:类要处理的数据,它包括常数和字段。,函数成员包括:方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。,5,类的具体成员有以下类型:,常量:代表与类相关的常数值,是在类中声明的值不变的变量。字段:类中的变量,相当于C+中的成员变量。方法:完成类中各种计算或功能操作。属性:定义类的值,并对它们提供读写操作。事件:由类产生的通知,用于说明发生了什么事
4、情。索引器:又称下标指示器,允许编程人员访问数组时,通过索引器访问类的多个实例。运算符:定义类的实例能使用的运算符。构造函数:在类被实例化时首先执行的函数,主要完成对象初始化操作。析构函数:在对象被销毁之前最后执行的函数,主要完成对象结束时的收尾工作。,6,【例5-2】创建一个学生类,学生类有年龄字段、年龄属性和所属系部常量,classStudent/定义学生类privateintnAge;/定义字段nAgeprivateconststringsDepartment=Computer;/定义常量sDepartmentpublicintAge/定义属性Ageget/获取属性值(字段值)retur
5、nnAge;set/设置属性值(字段值)this.nAge=value;publicstringDepartment/只读属性DepartmentgetreturnsDepartment;,7,staticvoidMain(stringargs)Students=newStudent();/创建对象s.Age=20;/设置属性值Console.WriteLine(s.Age);/获取属性值Console.WriteLine(s.Department);Console.ReadLine();,8,5.2.4静态成员与实例成员,1.当用static修饰符声明成员叫静态成员,静态成员属于类,为这个类
6、的所有实例所共享。静态成员只能由类来调用,不能由对象调用。2.不用static修饰符声明成员,称为实例成员,实例成员属于类的实例。,9,【例5-3】声明一个含有静态成员和一个实例成员的Student类,classStudentpublicintSNO;publicstaticintcount;publicStudent(ints)SNO=s;count+;publicvoiddisplay()Console.WriteLine(count=0,SNO=1,count,SNO);,10,classProgramstaticvoidMain(stringargs)Students1=newStud
7、ent(12);s1.display();Students2=newStudent(20);s2.display();程序输出结果为:count=1,SNO=12;count=2,SNO=20;说明:(1)在本例中,count是静态成员,属于类Student,所以,每生成一个学生实例,静态成员count就自动增一,记录学生总数。(2)SNO是实例成员,随实例的不同而不同。,11,5.2.5访问修饰符,(1)public声明公有成员,对公有成员访问不受限制,可以从类的外部、内部和派生类访问公有成员;(2)private声明私有成员,私有成员只能被类中的成员访问,外部无法访问。(3)protect
8、ed声明保护成员,保护成员可以被类中成员和派生类访问。(4)internal声明内部成员,内部成员只有在同一工程中的文件内才是可访问的。(5)protectedinternal只限于当前项目,或者从该项目的类继承的类才可以访问。,12,5.3构造函数和析构函数,5.3.1构造函数构造函数是特殊的成员函数,它主要用于为对象分配空间,完成初始化工作。构造函数特殊性表现在以下几方面。构造函数的名字必须与类名相同;构造函数可以带参数,但没有返回值;构造函数在对象定义时被自动调用;构造函数也可以重载,但不可以被继承;如果没有给类定义构造函数,则编译系统会自动生存一个默认的构造函数;,13,5.3构造函数
9、和析构函数,5.3.4析构函数析构函数是特殊的成员函数,它主要用于释放类实例。析构函数特殊性表现在以下几方面。析构函数的名字与类名相同,但它前面加了一个“”符号;析构函数不能带参数,也没有返回值;当撤消对象时,析构函数被自动调用;析构函数不能被继承,也不能重载。如果没有给类定义析构函数,则编译系统会自动生存一个默认的析构函数;,14,5.4方法,5.4.1方法的声明方法的声明的语法形式:,方法修饰符返回类型方法名(形参表)方法体,15,【例5-6】在下面程序中,MyArea类定义了两个方法以求三角形和圆的面积,classMyAreampublicdoubleTangleArea(doublea
10、,doubleh)doubles;s=a*h/2;returns;publicdoubleCircleArea(doubler)doubles;s=3.14*r*r;returns;,16,5.4.2方法的参数,1值参数在方法声明时不加修饰的形参数,它表明实参与形参之间按值传递。【例5-7】下面的程序演示了当方法Sort传递的是值参数时,对形参的修改不影响其实参。,17,5.4.2方法的参数,classProgramstaticvoidSort(intx,inty,intz)inttemp;/将x,y,z按从小到大排序if(xy)temp=x;x=y;y=temp;if(xz)temp=x;x
11、=z;z=temp;if(yz)temp=y;y=z;z=temp;Console.WriteLine(a=0,b=1,c=2,x,y,z);staticvoidMain(stringargs)inta,b,c;a=20;b=10;c=5;Sort(a,b,c);Console.WriteLine(a=0,b=1,c=2,a,b,c);,18,5.4.2方法的参数,2引用参数如果调用一个方法,期望能够对传递给它的实际变量进行操作,按值传递是不可能实现的。所以C#用了ref修饰符来解决此类问题,它告诉编译器,实参与形参的传递方式是引用。引用与值参数不同,引用参数并不创建新的存储单元,它与方法调用
12、中的实参变量同处一个存储单元。因此,在方法内对形参的修改就是对外部实参变量的修改。,19,【例5-8】将例5-7程序中Sort方法的值参传递方式改成引用参数传递,观察运行结果。,classMyclasspublicvoidSort(refintx,refinty,refintz)inttemp;/将x,y,z按从小到大排序if(xy)temp=x;x=y;y=temp;if(xz)temp=x;x=z;z=temp;if(yz)temp=y;y=z;z=temp;Console.WriteLine(a=0,b=1,c=2,x,y,z);classProgramstaticvoidMain(st
13、ringargs)Myclassm=newMyclass();inta,b,c;a=20;b=10;c=5;m.Sort(refa,refb,refc);Console.WriteLine(a=0,b=1,c=2,a,b,c);,20,5.4.2方法的参数,3.输出参数在参数前加out修饰符的被称为输出参数,它与ref参数很相似,只有一点除外,就是它只能从方法中传出值,而不能从方法调用处接受实参数据。在方法内out参数被认为是未赋过值的,所以在方法结束之前应该对out参数赋值。,21,【例5-9】求一个数组元素中的最大值、最小值和平均值。,classMyclasspublicvoidMaxMi
14、nArray(inta,outintmax,outintmin,outdoubleavg)intsum;sum=max=min=a0;for(inti=1;imax)max=ai;if(aimin)min=ai;sum+=ai;avg=sum/a.Length;classProgramstaticvoidMain(stringargs)Myclassm=newMyclass();intscore=66,33,4,5,81,32,56;intsmax,smin;doublesavg;m.MaxMinArray(score,outsmax,outsmin,outsavg);Console.Writ
15、e(Max=0,Min=1,Avg=2,smax,smin,savg);,22,5.4.4方法的重载,1.参数类型重载的方法【例5-12】下面程序定义的Myclass类中含有三个名为abs的方法,它们只是参数类型不同,在Main中调用该方法时编译系统会根据不同的参数类型确定调用哪个方法。,23,classMyclasspublicintMyabs(intx)intxabs;if(x=0)xabs=x;elsexabs=-x;returnxabs;publicfloatMyabs(floatx)floatxabs;if(x=0)xabs=x;elsexabs=-x;returnxabs;publ
16、iclongMyabs(longx)longxabs;if(x=0L)xabs=x;elsexabs=-x;returnxabs;,24,classProgramstaticvoidMain(stringargs)Myclassm=newMyclass();inta=-54;floatb=-89.54f;longc=-23456L;Console.WriteLine(|a|=0,|b|=1,|c|=2,m.Myabs(a),m.Myabs(b),m.Myabs(c);运行结果如下:,25,2.参数个数重载的方法,classMyclasspublicfloatMyArea(floatr)retu
17、rn(r*r*3.14f);publicfloatMyArea(floata,floath)return(a*h*0.5f);publicfloatMyArea(floata,floatb,floath)return(a+b)*h*0.5f);,【例5-13】参数个数的方法重载。,参数个数重载,26,classProgramstaticvoidMain(stringargs)Myclassm=newMyclass();floatr=1.5f;floata=2.0f,b=2.5f,h=1.2f;Console.WriteLine(“圆面积=0,梯面积=1,三角面积=2“,m.MyArea(r),
18、m.MyArea(a,b,h),m.MyArea(a,h);运行结果如下:,27,5.5属性,5.5.1属性的定义和使用通常,创建一个属性包含两个步骤:声明一个私有字段来存储属性值编写一个属性声明,为属性值提供访问接口。声明属性的一般形式为:,访问修饰符类型名属性名getreturn私有字段;set私有字段=value;,28,【例5-15】属性的最基本形式和用法(属性的读写控制),publicclassStudentprivatestringstudName;privateintstudID;publicstringStudentNamegetreturnstudName;setstudName=value;/value是关键字publicclassTestpublicstaticvoidMain(stringargs)StudentAstudent=newStudent();Astudent.StudentName=“ZhangSan”;stringaName=Astudent.StudentName;Console.WriteLine(aName);,29,5.5.2属性的读
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大气污染防治法城管职责题库
- 2026年青年干部黄河保护法专项竞赛题库
- 2026年历史常识与文化素养AI出题
- 2026年智能化工具应用管理晋升知识考核
- 2026年机器人研学旅行竞赛体验课程
- 2026年绿色环保技术突破题集
- 2026年人工智能赋能新质生产力题库
- 2026年题型多样化训练助你轻松备考过关
- 2026年女工特殊劳动保护规定与权益保障测试
- 2026年街道农贸市场及周边环境治理题
- 电离辐射危害及预防方法
- 系统解剖学课件:内脏神经
- GB/T 19515-2023道路车辆可再利用率和可回收利用率要求及计算方法
- GB/T 15587-2023能源管理体系分阶段实施指南
- ICD-9-CM3编码与手术分级目录
- 数据库原理及应用-课件
- 探究物联网的技术特征-说课
- GB/T 18804-2022运输工具类型代码
- LY/T 1726-2008自然保护区有效管理评价技术规范
- GA/T 951-2011紫外观察照相系统数码拍照规则
- 《内部控制》第四章-风险评估课件
评论
0/150
提交评论