类的属性1.ppt_第1页
类的属性1.ppt_第2页
类的属性1.ppt_第3页
类的属性1.ppt_第4页
类的属性1.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章,类的属性,回顾与作业点评,找出下面代码中的错误,int array = new int4 0,1,2,3,4 ; foreach( int arryItem in array) Console.WriteLine(arryItem ); , 位置错误,int array= new int5 0,1,2,3,4 ; foreach( int arryItem in array) Console.WriteLine(arryItem ); ,数组长度错误,变量类型错误,3,回顾,类和对象的区别是什么?,public class ,Student,,stu.sex,stu.a

2、ge,实现输出学生信息,下面代码有哪些错误?,回顾,结合上期的知识,小汽车、奔驰汽车和楼下那辆奔驰S500汽车。哪个是类,哪个是对象? 声明一个方法不需要返回值的关键字是什么?,预习检查,创建属性通过哪两个访问器?,本章任务,使用属性封装年龄字段 使用属性封装身份证字段 使用属性封装MyBank字段 实现计算一组数的奇偶个数,本章目标,掌握C#中的访问修饰符 掌握C#中的属性,生活中的访问级别,什么是访问级别?,C# 中的访问修饰符private,某些敏感字段只希望在类内部使用怎么办?,public class Employee public double pay = 3000; public

3、 void ShowPay() Console.WriteLine(您的工资等级是:0 , payLevel); Console.ReadLine(); ,不被其它类使用,private double pay = 3000;,私有成员,公有成员,示例1代码分析,关键代码回顾 :,public class Student /姓名 private string _name = 王丽丽; ,定义成private的字段,其他类访问不到,class Program static void Main(string args) Student stu = new Student(); stu._name =

4、 Lili; ,强制访问,无法访问编译错误,C# 中的访问修饰符,C#中的访问修饰符 :,12,访问修饰符 2-1,Teacher 类,private 成员,protected 成员,public 成员,internal 成员,Student 类,只有 Student 类在 Teacher 类都在同一程序集中,才可访问internal成员,不可访问,不可访问,可以访问,13,访问修饰符 2-2,14,公有成员和私有成员,class student private string name;/姓名 public int age; /年龄 public string idNumber ;/身份证号

5、static void Main(string args) student myStudent = new student(); myS = 张三; myStudent.age = 20; ,私有成员,公有成员,实例化一个对象,可以访问,演示示例1:访问修饰符,无法访问编译错误,15,数据安全,static void Main(string args) student myStudent = new student(); myStudent.age = -2; myStudent.idNumber = 123456; ,非法数据,身份证号不能被修改,无法获得数据,无法正常

6、赋值,有时候将类中的字段公开是不安全的,如果设为私有成员,能否对这些字段进行规则约束或者只读呢?,能否对_age设成可读且只能赋值为1100呢?,使用方法解决数据安全问题,private int _age; public int 方法1( ) return this._age; public void 方法2(int 参数) if (参数 100) this._age = 18; else this._age = 参数; ,1、使用者不可直接操作_age 2、用方法返回_age供读取 3、用方法限制使用者的非法赋值,什么是属性2-1,private int _age; public int A

7、ge get return _age; set if (value 100) _age = value; else _age = 18; ,通过公有Age访问和约束私有字段_age,字段,属性,相当于方法的参数,返回_age,给_age赋值,通过get和set访问,什么是属性2-2,class Student private string name; public string Name get return name; set name = value; ,get用于获取相应字段的值,set用于设置字段的值,只有get时:只读属性,只有set时:只写属性,get和set都存在:读写属性,可以

8、是任何数据类型,但类型必须一致,属性的使用,myStudent.Age = -20; /输出 myStudent.Age = 40; /输出,没有访问age,录入非法数据,输出myStudent.Age,属性的作用,private int _age; public int Age get return _age; set if (value 100) _age = 18; else _age = value; ,控制私有字段的可访问性,保护内部数据的安全,建议:类内部敏感字段使用 属性来控制访问,封装字段,将类中的字段、属性绑到一起,封装字段,避免非法数据的访问,保证数据的完整性,封装是面向对

9、象的三大特性之一,类的成员,我们学习了哪些类的成员?,小结,参考答案,使用属性封装身份证号字段并使用输出语句测试 身份证号必须为18位;否则重置为 “0000-0000-0000-0000-00”,练习使用属性封装MyBank字段,需求说明: 使用属性封装User里的所有字段 User成员字段:账户名,密码,身份证号,账户余额,账号 行为方法:取款操作,存款,完成时间:10分钟,使用属性,属性与字段、变量一样,用于表达式中,进行取值或赋值。例如: Console.WriteLine(已创建半径为 + aCircle.Radius + 的圆); Console.WriteLine(目前圆对象个数

10、为: + Circle.NumCircles); 在所在类的外部使用属性,也要加上前缀。 实例属性,要用对象名作前缀,例如 aCircle.Radius; 静态属性,要加上类名作前缀,例如 Circle.NumCircles。 在所在类的内部使用属性,可以不加前缀,也可以加上前缀。 读取属性值时,程序执行属性get访问器中的代码。 属性赋值时,程序执行属性set访问器中的代码,所赋的新值自动传给内建的value参数。,属性的局限,(1)除了get、set访问器之外,属性不能包含其他并列的代码块。 (2)除了set访问器内建的value参数,get、set访问器不能获取别的参数。 (3)不能声明

11、const属性。 (4)不能将属性作为一个ref或out参数,但字段可以。,自动实现属性,系统提供了自动生成属性set和get访问器代码块的机制。 自动实现属性的一般形式: 访问修饰符 可选static 类型 属性名 get; set; 自动实现的属性必须同时声明get和set访问器。如果要创建只读的自动实现属性,则可声明private的set访问器。 【例】建立控制台应用程序项目,编写能自动实现属性的矩形类,计算矩形面积和周长,统计矩形对象个数。 class Rectangle /自定义矩形类 . public double Length get; set; public double Wi

12、dth get; set; public static int NumRectangles get; private set; . ,在Program类中编写Main方法代码:,string inputString; double length, width, area, girth; while (true) Console.Write(请输入矩形的长度(直接按回车键退出程序):); inputString = Console.ReadLine(); if (inputString = ) break; else . Rectangle aRectangle = new Rectangle(

13、length, width); . Console.WriteLine(已创建矩形对象个数: + Rectangle.NumRectangles); . ,自动实现的属性,自动实现的属性,编译时自动生成了对应的私有字段及访问器代码。 例如例7-6的矩形长度属性: public double Length get; set; 编译时系统在类Rectangle内部自动生成了如下代码: private double _length; public double Length get return _length; set _length = value; 自动实现的属性,由系统生成的访问器代码块语句

14、是很简单的,不可能包含复杂的逻辑功能。,【例7-7】建立控制台应用程序项目,编写在长度和宽度属性中限制出现负数的矩形类,.,修改例7-6项目中的矩形类Rectangle,部分代码如下: private double _length, _width; /私有的矩形长度、宽度字段 public double Length /长度属性 get return _length; set if (value 0) throw new Exception(矩形的长度不能为负数!); else _length = value; public Rectangle(double length, double wi

15、dth) /构造函数 Length = length; Width = width; NumRectangles+; ,31,小结,编写MySchool中的Student类 包含的属性 年龄(0-100)不符合的设为18 姓名(只读属性) 爱好(读写) 给属性赋值并打印出来,this关键字的作用,C#中this关键字有什么作用?,private string name; /姓名 public void SetName(string name) this. name = name; ,名字相同,this调用的是成员变量,C#中的this关键字,C#中this关键字的使用 :,public class Student /姓名 private string _name; public void SetName() this._name = 王丽丽; ,this:当前实例,通过this可以访问当前类的所有成员变量和方法,直接设定属性构建对象,不显式调用构造函数,直接设置对象属性初始值构建对象: new 类名 属性名1 = 值, 属性名2 = 值, . 大括号内,不必列出所有属性的赋值,没列出的取默认值。 【例7-8】建立控制台应用程序项目,直接设定矩形对象的长、宽属性值构建矩形对象。 矩形类Rectangle代码与例7-6一样。 编写Main方法代码(部分): Rectangle a

温馨提示

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

评论

0/150

提交评论