zoukankan      html  css  js  c++  java
  • get与set属性

    get与set属性

    get属性 set属性

    就直接分析程序吧,如下有三段程序,三个程序都是在某一个类中。

    //程序1
    public string name;
    
    //程序2
    public string name{get;set;}
    
    //程序3
    private string name;
    public string Name;
    {
        set{name = value;}
        get{return name;}
    }
    
    • 程序1

    这个比较简单易懂,直接就是类中的一个共有的数据成员。可以直接通过类的对象进行初始化后,然后进行调用。

    • 程序2

    第一眼看的时候会比较蒙,get与set的作用是啥,这是个什么用法。我都有点怀疑自己了,当遇到这个的时候。不过一番了解后,就知道了。简单点说,如下:

    • 程序2与程序1在使用的作用是一样的。其中的get与set是name数据成员的两个属性

    为什么,第一个没有呢?

    1. 第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类
    2. 第二个类型的name属性通过get set关键字进行了封装,get和set分别对应的是可读和可写

    也就是说,每个数据成员都是具有get与set属性的。在默认没有显示的设置的时候,默认就是个可读与可写的。而程序2的写法就对其进行了显示的表达,两者在使用上没有区别。

    但是如果将程序2,进行一个小的修改:

    //程序2-修改1
    public string name{get;}
    //程序2-修改2
    public string name{set;}
    

    修改后,name数据成员将与程序1中的name有所区别。

    • 修改1:name只能可读,将不能修改其值。
    • 修改2:name的属性就是只能进行写入

    再来说说程序3的作用

    //程序3
    private string name;
    public string Name
    {
        set{name = value;}
        get{return name;}
    }
    
    • 私有数据成员是name,而Name是一个属性。对name数据成员进行保护的

    可能有疑问的是,value没有进行定义,为什么可以直接进行使用呢?

    • 在用set时有一个特殊的变量value 就是设置属性时的值
    • value 隐式参数,用于设置访问器以及添加或移除事件处理程序。

    这样一来问题就解决了。这三个程序之间的区别也就区分开来了。在实际的使用中,应该对数据成员都会有一个相应的属性。一方面是对数据成员的保护,而另一方面可以进行数据成员的取值与赋值进行限制。用一个小案列来说明一下,如下:

    // 年龄一般来讲都是在0到一百之间
    //防止出现小于0 或大于100 进行限制一下
    private int age;
    public int Age
    {
        get{return age;}
        set{
          //value 是set的隐式参数
          //set值也就是对value值进行设置
         if(value<0 || value>100)
         {
             //超出范围的值 进行归零
             value = 0;
         }
         // 在范围内 进行值的设置
            age = value;
        }   
        }
    }
    

    以上的程序就对age数据成员进行保护的同时对age值的设置也进行了一个限定。

    程序看起来都挺简单的,但是在实际的使用中,作用还是挺大的。

    Did you git it?

  • 相关阅读:
    上一张作业day16
    python 函数递归,三元表达式解读,匿名一次性函数,模块略解
    迭代器,生成器与内置函数
    闭合函数和装饰器
    函数的其他关键点*与**,函数的对象可以当做变量去使用,函数的嵌套,名称空间
    python函数,应用与讲解
    文件处理方式
    html-04 html骨架
    html-03 Web标准
    html-02 浏览器内核
  • 原文地址:https://www.cnblogs.com/Serendipitychen/p/14122835.html
Copyright © 2011-2022 走看看