zoukankan      html  css  js  c++  java
  • 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#编程指南里的对属性的定义:

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

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

    一段总结:

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

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

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

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

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

  • 相关阅读:
    The method getDispatcherType() is undefined for the type HttpServletRequest错误解决方法
    OpenGL编程逐步深入(三)在窗口中显示一个三角形
    OpenGL编程逐步深入(二)在窗口中显示一个点
    开源3D游戏引擎Irrlicht简介
    OpenGL编程逐步深入(一)创建一个窗口
    用lua实现ByteArray和ByteArrayVarint
    lua 的io操作,非常详细
    Lua日期与时间操作
    Lua语言开发Cocos2d-x游戏视频教程第L0401课-Cocos2d-x中使用Lua
    Golang 类型转换整理
  • 原文地址:https://www.cnblogs.com/net-sky/p/10365883.html
Copyright © 2011-2022 走看看