• C#属性总结


    1.私有字段和公有字段的比较

    类中的私有字段只能在类的内部访问,而对类的公有字段的访问却不受限制。

    在以前,为了封装,程序中会尽量少使用公有字段,因为使用公有字段的话,会让程序失去控制权。所以程序中会大量使用私有字段。不过,使用私有字段时,需要程序为私有字段定义额外的取值方法和赋值方法。

    下面的示例代码定义了一个私有字段age来表示年龄,同时定义了取值方法GetAge()及赋值方法SetAge()供外部来调用,通过这两个方法,外部的对象就可以来访问私有变量age了。

    private int age;
    public void SetAge(int age)
    {
          this.age = age;
    }
    public int GetAge()
    {
           return this.age;
    }

    使用这种方法时,在SetAge()方法和GetAge()方法中可以增加相应的控制代码来防止外部对age的非法访问。如使用下面的代码就可以避免将一个负数赋值给age,因为一个人的年龄不可能小于0。

    public void SetAge(int age)
    {
         if (age > 0)
         {    
              this.age = age;
         }
    }
    

    不过这种方法比起使用公有字段,略显麻烦。

    要是使用公有字段的话,则只需使用下面的定义代码(就短短一行哦,不过安全性就不要再想了):

    public int Age;

    这样,在类的外部就可以使用下面的代码来访问这个公有字段了:

    x.Age = 10;//x为模拟类实体

    而在类的外部,私有字段的访问就必须通过赋值方法和取值方法来完成了。

    x.SetAge(10); //x为模拟类实体

    虽然访问私有字段与公有字段都是短短一行代码,但是访问私有字段却要通过一个方法,感觉还是什么了点(至于是什么,天知道),呵呵。       

    下面简单总结一下:

    使用“私有字段+赋值方法+取值方法”的方式略显麻烦但是可以保证字段的安全性。

    而使用公有字段方式简单但是却无法保证字段的安全性。

    很显然,安全性肯定要比简单性对程序影响深远。这也就是以前很少使用公有字段的原因了。

    难道我们就不能同时兼顾公有字段的简单性和私有字段的安全性吗。

    答案是有的,属性满足我们的要求。

    2.属性

    在介绍属性前,先给出表示年龄的属性代码,如下:
    private int age;
    public int Age 
    { 
        get
        {
            return this.age;
        } 
        set
        {
            if (value > 0)
            {
                this.age = value;
            }
        }
    }
    

    属性的访问代码如下:

    x.Age = 10;//x为模拟类实体

    是不是很熟悉啊,对的,和公有字段的访问方式一摸一样。

    并且,在给属性赋值时,会调用属性的set方法(属性提供的set方法被称为set访问器,get方法被称为get访问器),在set方法中可以增加相应的控制代码来防止外部对私有字段age的非法访问。这与为私有字段添加的SetAge()方法的作用相同。

    可见,属性就是我们需要的,同时兼顾了公有字段的简单性和私有字段的安全性。

    最后,介绍一下属性的概念:属性是一个或一对方法(类似于为私有字段添加的赋值方法和取值方法),在客户机看来,他们是一个字段(类似于公有字段)。当属性定义中省略set访问器时,属性则为只读属性;当属性定义中省略get访问器,属性就为只写属性

    好了,就写到这里了。

  • 相关阅读:
    Tomcat下bootstrap启动分析
    Ubuntu读取/root/.profile时发现错误:mesg:ttyname fa
    【转载】Activiti delete process definition by key
    Ubuntu16解锁root
    Activiti源码:ActivitiEventSupport类中eventListeners的设计
    [转载] Activiti Tenant Id 字段释疑
    Linux下使用NTFS格式移动硬盘
    Linux dd命令制作U盘启动盘
    Activiti源码:StandaloneInMemProcessEngineConfiguration与SpringProcessEngineConfiguration
    Activiti源码学习:ExecutionListener与TaskListener的区别
  • 原文地址:https://www.cnblogs.com/riskyer/p/3293823.html
Copyright © 2020-2023  润新知