学习日报 1026 使用属性升级MyBank
访问修饰符
理解访问修饰符
-
公开的与私有的
- 任何对象都会有公开的一面
- 任何对象也会有私有的一面
-
餐厅的大厅与后厨
- 大厅是公开的,食客随意走动
- 后厨是私有的,后厨重地,闲人免进
-
填表:女人的身高与年龄
- 填写问卷调查时
- 女人的身高无法隐藏,一般公平的写
- 年龄与体重等信息比较敏感,能不填就不填
- 以上情况适宜于上年纪体重大的女性
公开的与私有的
-
演练,体验public与private
-
定义一个类,类中定义属性,不给访问修饰符
-
实例化这个类为一个对象,给这个对象赋值,会有提示弹出
如果类中的属性没有提供访问修饰符的时候
这个类所实例化出来的对象
的属性
不可以在另一个文件中被使用 -
给这类的属性添加public访问修饰符后,正常运行
-
结论?
- 类中定义的属性,我在类的外部无法直接操作。原是,受保护级别的限制
- 解决这种限制,给类的属性定义的时候,前面加上public访问修饰符。表达一个,该属性是公开的属性。
-
给类的属性添加private访问修饰符,试试结果
-
定义一个类的方法,方法中使用private修饰的变量
-
需求说明
-
-
结论?
- private修饰的属性 是私有的,外部不可访问
- 内部的方法是可以访问的
-
提示
- 如果类中定义属性不加访问修饰符,默认是internal的访问修饰符,功能后面章节再议
-
-
演练,私有访问修饰符的应用
-
需求:定义一个人,名字叫小丽
-
给小丽赋值年龄,年龄赋值为200岁
-
想一想,年龄给200岁是否合理?
-
如何控制给对象赋值的准确性?
- 不允许直接操做对象的属性值
-
理解图例
- 限制年龄被直接操做
- 提供一个公有方法,此方法可以操做私有的属性
- 调用公有方法,提供相关的数据
-
如果要赋值,需要经历一个验证
-
写一个给年龄赋值的方法,setAge,接收一个年龄
- 如果年龄超出人类范围,给年龄赋值-1代表非法操作
- 如果年龄是正常的,那就使用正常的值
-
写一个获取年龄的方法,getAge,输出年龄
-
参考代码
women
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication5 { class Womem { public string name; private int age; public void setAge(int n) { // 年龄的合法性判断 if (age < 0 || age > 100) { age = -1; return; } age=n; } public void getAge() { Console.WriteLine(age); } } }
Program
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { Womem one = new Womem(); one.name = "小丽"; one.setAge(20); one.getAge(); Console.WriteLine("ok"); Console.ReadKey(); } } }
-
课堂代码
-
-
小结
-
为了防止其他人随意的操做对象的一些敏感属性
-
对这些属性进行私有化
-
提供公有方法让你改
-
设置值的方法,一般都接收值
- 方法中会验证你所传递的值
- 如果合法,就使用
- 如果不合法,就有一个默认值或其它提示
-
获取值的方法
- 直接输出私的有属性
-
-
this关键词
演练一,引入this关键词
-
定义一个people,人的类
-
具有属性name,有默认值“人类”
-
定义一个起名字的方法setName,接收参数name
- 打印参数name
- 打印属性name
-
看代码猜一猜结果
方法中的name到底是什么属性
方法的调用
-
答案
-
问题,如何输出值为“人类”的name值呢?
-
试一试this关键词
演练二,写一个设置年龄的方法,形参不躲属性名
-
说明
- 之前的设置年龄的属性中,我们躲避了类属性名称
- 本例中不用躲避,直接让形参起想起的名字
-
演练
-
定义一个Hero类,具有私有的age属性
-
类中定义setAge方法,接收一个age属性
-
如果年龄在1-100内就给对象赋值成功
-
如果年龄不在这个范围内,就设置年龄为0岁
-
代码
-
小结
- 公有方法中的局部变量age与this.age的区别
- 公有方法中局部age,它在方法结束后就释放了
- this.age,它是对象的一个属性,只要对象在还,this.age就一直存在
- 我们通过this.age是可以绝对的访问到对象的age的
对象的读写属性
文件的读写属性
-
演示 记事本的只读属性 1022
演示 记事本的只读属性 1022 - 西瓜视频
https://www.ixigua.com/6886445386551165448/?utm_source=xiguastudio
对象属性的读写属性
- 换一种读法以示区分,对象字段的属性
演练 使用读写属性
类中字段的读写属性
使用字段的属性
分步操作
-
写义一个标识符,用花括号包裹get与set控制器
-
给get控制器写返回值
-
在set控制器中存在value形参
- 形参的值就是赋的值
- 通过给字段赋值来改变对象的字段值
对象的初始化器
说明
- 对象实例化时有时需要初始化数据
- 使用初始化器可以一步到位的操作
格式
- 类型 变量=new 类名(){字段1的读写属性=值1,字段2的读写属性=值2}
例子
- Hero a = new Hero() {Age=16,Size=46 };
演练
- 如果对象有了封装的属性,初始化时给封装属性名赋值
方法的封装
什么是封装?
- 把相关的东西打包放在一起
- 例子,两个数交换是由一组代码组成,我们可以把它们封装在一个方法中
封装演习
-
手动封装方法
手动封装方法 c# 2248 - 西瓜视频
https://www.ixigua.com/6886456841027453447/?utm_source=xiguastudio -
自动封装方法
-
视频
- 子主题 1
-
传参方式
理解
-
战略地图案例
- 情况一,地图拷备
- 情况二,地图移交
-
表格文档案例
- 情况一,博客记录表,文件发学生群里,学生填写
- 情况二,表格共亨链接发学生群里,学生填写
值传递
-
代码
引用传递
-
使用ref关键词
- 形参前加
- 实参前加
-
代码