zoukankan      html  css  js  c++  java
  • C#——字段和属性

    //我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)《C#语言入门详解》学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师!

    在刚开始学习属性这一节时,开始还很觉得有意思,是一个全新的东西,但是慢慢的感觉学的很糊涂,想了想其根本在于自己把字段和属性一直“搞不通”

    当时的最大的疑惑就是:有了字段,为什么还要有属性呢?

    今晚又看了一遍视频,才有了一些思路

    如果在一个类中有一个公有字段,那么在这个类的外部我们可以自由无阻的使用这个字段,但是如果给这个字段赋了一个很“离谱”的值,那这对程序可能会造成很大的影响

    比如:

    Class Student

    {

       public int Age;

    }

    在这个类外我们写:

    Student stu =new Student();

    stu.Age = 1000;

    众所周知,人目前是不可能活到1000岁的,但是这样赋值编译器又不会报错(假设外部没有限制Age取值的逻辑),但是我们知道这个程序运行后的结果是有错误的

    所以我们有了“属性”这个东西,代码可以这样写:

    class Student
        {
            private int age;
    
            public int Age
            {
                get { return age; }
                set {
                    if (value >= 0 && value <= 100)
                    {
                        age = value; 
                    }
                    else 
                    {
                        throw new Exception("Age value has error.");
                    }
                }
            }
    

      这里的value以为上下文关键字了

    属性里的get,set访问器可以对字段提供一些安全保护了(个人理解为使用一些逻辑来保护字段的值为“说的过去的”)

    ---------------------------------------------------------------------------------------------------------------

    这是微软官方C#编程指南里的对属性的定义:

    “属性是这样的成员:它提供灵活的机制来读取、编写或计算某个私有字段的值。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。 这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。”

    ---------------------------------------------------------------------------------------------------------------

    从猛哥PPT里摘抄的一段总结:

    //属性对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的

    //对内:保护字段不受“非法值”污染

    //一般情况下,它们都用于表示实体(对象或类型)的状态

    //属性大多数情况下是字段的包装器(wrapper)

    //建议:永远使用属性(而不是字段)来暴露数据,即字段永远是private或protected的

    -----------------------------------------------------------------------------------------------------------------

    希望网友们能够收获一些东西,也请大家指出我的错误(我的老师猛哥应该肯定无错了,比如我的理解是否正确,希望大家一一指正,共同交流,共同指正!

  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/GeekDragon/p/5805107.html
Copyright © 2011-2022 走看看