【机房系统知识小结点系列】之为什么不直接将属性设置为public,而是通过Get Set方法?
来源:互联网 发布:威少身体数据 编辑:程序博客网 时间:2024/05/01 19:09
在做机房收费系统的时候,在Entity中存放的一般为实体类,通常只有Get,Set方法,可是却不知道为什么要使用GetSet?直接把属性定义为Public属性,岂不是更简便吗?
这就要谈到了GetSet的好处:
属性由两个部分组成:属性头和存储器(get访问器+set访问器)
Get作用:读取字段的值,返回私有字段_sex的值
Set作用:为字段赋值,value为隐形参数,参数的类型就是属性的类型,在这里可以看出为String类型的。
原因:
1 、面向对象
面型对象,将数据与行为分离。对象就是属性+行为,封装就是把对象的私有属性封装起来,只有通过自己公开的行为去改变(获得)对象内部的私有属性信息,而那些public的方法正是面向其他对象的接口,只有通过接口去改变(获得)对象的私有属性。GetSet就是对外的接口。
换句话说:普通变量就是放在屋子里的东西,是什么样明明白白,而属性则是在屋子的门口放了个守门人,你拿东西放东西要经过他这个守门人就是属性访问器,拿东西就是get,放东西就是set怎么拿怎么放是它说了算。
2、安全性
Set对类的成员变量设置访问一些权限,限定写入数据的条件。
设想,你有一个Person类代表一个人,Person有一个String类型的sex字段表示性别,理论上,sex只接受两个值, '男'和 '女 ',但如果你把sex字段设为public,你很难限制你的用户只给它赋 '男 '或 '女 '值。
将sex设为private,再用set()来设置性别,你就完全可以控制这种行为了。如下所示:限定性别只能为“男/女”
Private _sex As String Public Property Sex As String Get Return _ sex End Get Set ( ByVal value As String) _ sex = value If (value = "男" Or value ="女") Then _ sex= value End If End Set End Property
(满足对象的封装性,使得外界不能访问这个属性。当然你也可以通过构造函数进行取值和赋值,这样只是闲的比较麻烦而已。)
3、可维护性
在机房系统中Entity实体类一般是作为参数/返回值供各层调用的,所以使用的次数比较多。假设因为某种原因我们需要把Person类的一个变量String _sex,改为String strSex,如果直接对变量_sex进行操作的话,就得需要修改整个程序的N多处,如果使用了属性,则只需要修改整个方法即可(如图所示),除去这个属性之外的地方根本不需要改变。
Private strSex As String Public Property Sex As String Get Return strSex End Get Set ( ByVal value As String) strSex = value End Set End Property
综上所述,使用GetSet设定属性,更能体现面向对象的特点,并保证安全性、可维护性。
- 【机房系统知识小结点系列】之为什么不直接将属性设置为public,而是通过Get Set方法?
- java将属性设置为私有,在给其添加get/set方法和直接把属性设置成public有什么区别
- 【机房系统知识小结点系列】之遍历窗体中的控件,判断Text是否为空?
- 【机房系统知识小结点系列】之DataGridView控件导出为Excel
- 【机房系统知识小结点系列】之组合查询
- java 私有属性加get/set方法跟直接把属性设置成public有区别吗?
- 为什么Java成员类里面要写set、get等方法而不是直接public?
- 类中使用get和set方法来控制成员变量,而不将成员变量的权限设为public的原因?
- 【封装】java中为什么要将属性进行私有化,又使用set和get方法来设置和获取属性呢?
- 【C#】开发的两个基本编程原则的深入讨论--为什么要用get,set,直接用public string Name不行吗
- java类中为什么设置set 和get 方法操作属性
- 属性 set ,get 方法
- 属性之get,set
- java类中为什么设置set和get方法
- java中不利用get方法获得私有属性、不利用set方法修改私有属性、通过执行私有方法getName获得私有属性、通过执行私有方法setName更改私有属性name的值
- 简单button样式的设置(不是直接将背景设置为图片,而是设置背景的颜色)
- 【Unity&人物属性】人物属性大量设置用set,get方法还是public成员
- 属性生成器、set get 方法
- sizeof进行结构体大小的判断 (包含位域),讲解详细
- JSP中forward和sendRedirect的区别
- Using KVO for Table Update
- EasySize - Dialog resizing in no time!
- 正则表达式
- 【机房系统知识小结点系列】之为什么不直接将属性设置为public,而是通过Get Set方法?
- php 访问mysql数据库验证登录
- 东软实训随笔
- 东软实训总结
- HDU4546(优先队列)
- 查未清PO
- MFC消息循环和消息泵
- onchange的多浏览器处理
- 关于informix和oracle,DB2的记录