天天看点

为什么要使用Get和Set访问器

          使用到实体,那么无可避免的就要涉及到get和set属性访问器了。可以说从我们接触面向对象的编程开始,它就一直伴随着程序的开发而存在。虽然我们一直在使用,但是很多人其实并不知道它的来龙去脉,在这篇博客中,我们就揭开它的神秘面纱。

         第一个要解释的问题就是,get,set访问器是什么?这个需要从程序和变量说起。软件是由程序和数据组成的,数据在程序中有两种存储形式,常量和变量。在使用访问器以前,我们都是使用public共有的关键字来来定义一个 变量,然后程序去使用这个变量;我们可以这样理解,变量相当于一个屋子,程序直接从屋子中放东西和拿东西;但是这样带来一个问题,变量是公有的,也就是屋子没有任何保护措施,任何成员都可以访问这个变量,这样的程序很不安全。

<span style="white-space:pre">	</span>public string Name;
           

         如何解决这个问题呢,假如我们给这个屋子加一把锁或者找一个看门人不就解决了这个问题吗。get和set访问器就可以看成是屋子的守门人,现在如果想要访问这个变量,就需要通过守门人才能到到目的。既然是为了解决安全的问题,那么这个安全是如何体现出来的呢?

public class people
    {
        private string name;
        public string Name
        {
            get;
            set;
        }
    }
           

            第一 我们可以通过两个访问器的有无来保护数据;假如说,我们在定义实体的时候,直接给实体赋值,属性访问器只有GET,没有set,这样,我们就可以实现只能获取值而不能修改这个变量的功能。

public class people
    {
        private string name;
        public string Name
        {
            get;
        }
    }
           

          第二 我们可以在属性访问器中增加条件限制  比如说,我们可以在set访问器增加数据判断,或者在get访问器中增加判断是否为空的条件。

public class people
    {
        private string name;
        public string Name
        {
            get
            {
                if (name == null)
                {
                    return null;
                }
                else
                {
                    return name;
                }
            }
            set
            {
                if (value == null)
                {
                    throw new Exception("您输入的的数据为空,请重新输入!");
                }
            }
        }
    }
           

         在使用实体的时候,我们并没有显示的去调用这两个访问器,它们是如何工作的呢?我们在调用实体,赋值的时候,系统会自动调用set访问器;取值的时候,系统会自动调用get访问器。

         赋值的时候,实体会自动调用隐式参数value,value获得数据,然后赋值给变量。

          可以说,安全性就是访问器使用的最大优点了,除此之外,还有什么好处呢?方便了反射技术的使用,使用反射,利用set访问器,可以将DataTable转化为泛型集合,方便数据传递和使用。

        get和set访问器的使用,增加了数据和程序的安全性,也方便了程序的开发。