在做机房收费系统的时候,在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设定属性,更能体现面向对象的特点,并保证安全性、可维护性。