您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向对象程序语言设计5用对象思考:属性与方法
第二章用对象思考:属性和方法理解类与对象的概念理解属性和方法的概念能够定义一个简单的类本章目标对象对象是人们要进行研究的任何事物颜色:灰色排量:3.0刹车产地:德国行驶名字:保时捷行为状态颜色:红色排量:4.0刹车产地:意大利行驶名字:法拉利行为状态描述汽车的特征和行为有各自不同的状态类和对象小汽车颜色:灰色排量:3.0刹车产地:德国行驶名字:保时捷行为状态类的实例化,是由类具体化对象类产地车体颜色行驶刹车…归纳一组相似对象的共性对象属性方法类描述一组相似对象的共性类和对象的应用类和对象的简单应用//…Carferrari=NewCar();ferrari.Run();//…类对象实例化对象调用方法publicclassStudent{intage=26;//姓名privatestringname;publicstringName{get{returnname;}set{name=value;}}//问候publicvoidSayHi(){…}}类和类的成员类的成员字段属性方法…类名自定义一个类自定义类DBHelperclassDBHelper{//数据库连接字符串privatestaticstringconnString=…;//数据库连接Connection对象publicstaticSqlConnectionconnection=newSqlConnection(connString);}访问修饰符私有公有公有成员和私有成员classstudent{privatestringname;//姓名publicintage;//年龄publicstringidNumber;//身份证号}…staticvoidMain(string[]args){studentmyStudent=newstudent();myStudent.name=张三;myStudent.age=20;}私有成员公有成员实例化一个对象可以访问演示示例1:访问修饰符无法访问编译错误数据安全staticvoidMain(string[]args){studentmyStudent=newstudent();myStudent.age=-2;myStudent.idNumber=123456;}非法数据身份证号不能被修改无法获得数据无法正常赋值有时候将类中的字段公开是不安全的如果设为私有成员能否对这些字段进行规则约束或者只读呢?在类中使用属性privateintage;//年龄publicintAge{get{returnage;}set{if(value0&&value100){age=value;}else{age=18;}}}myStudent.Age=-20;…//打印myStudent.Age=40;…//打印没有访问age公开Age录入非法数据打印私有变量age演示示例2:MyAttribute不公开age通过公有Age访问和约束私有字段age什么是属性C#不直接访问类的数据通过访问器访问(get,set)classStudent{//姓名privatestringname;publicstringName{get{returnname;}set{name=value;}}}返回nameget用于获取相应字段的值set用于设置字段的值只有get时:只读属性只有set时:只写属性get和set都存在:读写属性属性的类型和字段类型必须一致。给name赋值属性的特点privateintage;//年龄publicintAge{get{returnage;}set{if(value0&&value100){age=value;}else{age=18;}}}控制私有字段的可访问性保护内部数据的安全建议类内部敏感字段使用属性来控制访问类型可以是各种数据类型,如:对象、数组等等封装字段将类中的字段、属性绑到一起封装字段封装是面向对象的三大特性之一避免非法数据的访问保证数据的完整性演示:在VS中使用重构——封装字段小结编写MySchool中的Student类包含的属性年龄(0-100)不符合的设为18姓名(只读属性)爱好(读写)给属性赋值并打印出来在类中使用方法方法是类或对象的行为对象需要做某些事情,在类中添加方法回顾方法的定义访问修饰符返回类型方法名(参数列表){//方法的主体…}通过return返回值如果返回类型是void,方法是否需要返回值?第一学期我们学习了几种参数传递方式?方法的参数回顾:参数传递使用值传递,参数值的更改不能保留。使用ref可以将参数值的更改保留out类型参数privatestaticvoidAddScore(refintscore,outintscoreResult){if(score50&&score60){Console.WriteLine(你的成绩在50-60之间,可以加分。);score=60;scoreResult=60;}}都可以输出结果ref侧重修改,out侧重输出不能写成AddScore(outintscoreResult)方法的使用实现两个整型的加法classAdd{publicintSum(intpara1,intpara2){returnpara1+para2;}}AddmyAdd=newAdd();intsum=myAdd.Sum(2,3);使用方法实例化一个对象返回结果演示示例3:方法的使用调用方法静态方法classmySwap{publicstaticvoidSwap(refintnum1,refintnum2){inttemp;temp=num1;num1=num2;num2=temp;}}classProgram{staticvoidMain(string[]args){intnum1=5,num2=10;mySwap.Swap(refnum1,refnum2);}}回顾一下,Swap方法在另一类中如何调用?静态方法使用类名调用静态方法静态方法和实例方法使用static修饰的方法称为静态方法使用实例对象调用的方法叫做实例方法静态方法实例方法static关键字不需要static关键字使用类名调用使用实例对象调用可以访问静态成员可以直接访问静态成员不可以直接访问实例成员可以直接访问实例成员不能直接调用实例方法可以直接访问实例方法、静态方法调用前初始化实例化对象时初始化为什么要重载publicintSum(intpara1,intpara2){returnpara1+para2;}整形参数,返回值整型如果想让两个string型、两个double型相加,怎么做?编写两个不同名字的方法,这样我们在进行调用时要先判断是什么类型,能否不判断直接就能相加呢?方法的重载同一个类中添加几个名字相同,参数与返回值不同的方法publicstringSum(stringpara1,stringpara2){returnpara1+para2;}publicdoubleSum(doublepara1,doublepara2){returnpara1+para2;}调用时只要传递参数即可,无需判断类型演示示例4:方法的重载classAdd{publicstringSum(stringpara1,stringpara2){…}publicintSum(intpara1,intpara2){…}}重载的方式基于不同类型参数的重载classAdd{publicintSum(intpara1,intpara2){…}publicintSum(intpara1,intpara2,intpara3){…}}相同类型不同参数个数的重载不允许重载方法仅仅是返回值不同演示示例5:构造函数Studentzhang=newStudent();zhang.Name=张靓靓;zhang.Age=20;zhang.Hobby=唱歌歌;一种特别的方法班级来了新学员添加学员对象学员类实例化对象、设置属性初始属性若太多,设置麻烦能否在实例化时设置属性?publicStudent(stringname,intage,stringhobby){this.Name=name;this.Age=age;this.Hobby=hobby;}Studentzhang=newStudent(张靓靓,20,唱歌歌);一次设置完成类中加入这个方法添加的方法叫做构造函数构造函数是类中的一种特殊的方法构造函数名与类名相同,不返回任何值可初始化成员变量classStudent{publicStudent(stringname,intage,stringhobby){this.Name=name;this.Age=age;this.Hobby=hobby;}}初始化成员变量this关键字引用类的当前实例将参数的值,分别赋给当前实例的属性使用构造函数new关键字可以实例化一个新的对象指定对某个带参数的构造函数Studentzhang=newStudent(张靓靓,20,唱歌歌);每次创建类的实例都会调用此方法实例化对象调用构造函数使用new关键字Studentscofield=newStudent();Studentzhang=newStudent(张靓靓,20,唱歌歌);实例化一个对象实例化一个新对象publicStudent(){}publicStudent(stringname,intage,stringhobby){this.name=name;this.age=age;this.hobby=hobby;}构造函数的重载构造函数也可以重载Studentscofield=newStudent();Studentzhang=newStudent(张靓靓,20,唱歌歌);方法名相同,参数不同综合实战构造函数的重载,可以使类实例化对象更灵活演示示例6:重载(RssRead类的搭建)点击次数Clicks描述Descriptionurl地址Url构造函数显示名称DisplayName方法属性都是读写属性privateinta;publicintA{get{returna;}set{a=value;}}你喜欢读哪段代码?合格的程序要符合编码规则直观易于理解、有意义的单词方便维护有利于调试编码规则的必要性如name,age,studentprivateintname;publicintName{get{returnname;}set{name=value;}}无法理解是什么Pascal命名法变量采用有意义的单词单词的一个字母大写StudentName、MaxAgeCamel命名法变量采用有意义的单词第一个单词的首字母小写其余单词的首字母大写name,classNamePascal和Camel命名法publicclassStudent{privatestringfirstName;publicstringFirstName{get{returnfirstName;}}}总结简述属性和字段的区别?只读属性中只有哪个访问器?简述方法的重载时需要注意的问题?new关键字有什么作用?this关键字的作用是什么?
本文标题:面向对象程序语言设计5用对象思考:属性与方法
链接地址:https://www.777doc.com/doc-3373870 .html