Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

【机房系统知识结点系列】之为什么不直接将属性设置为public,而是通过Get Set方法?

$
0
0


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

作者:lantingxv_jing 发表于2013-8-27 18:49:33 原文链接
阅读:19 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles