C#——字段和属性_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#——字段和属性

C#——字段和属性

 2016/8/25 5:31:32  GeekDragon  程序员俱乐部  我要评论(0)
  • 摘要://我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)《C#语言入门详解》学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师!在刚开始学习属性这一节时,开始还很觉得有意思,是一个全新的东西,但是慢慢的感觉学的很糊涂,想了想其根本在于自己把字段和属性一直“搞不通”当时的最大的疑惑就是:有了字段,为什么还要有属性呢?今晚又看了一遍视频,才有了一些思路如果在一个类中有一个公有字段,那么在这个类的外部我们可以自由无阻的使用这个字段
  • 标签:C#

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

 

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

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

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

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

比如:

Class Student

{

   public int Age;

}

在这个类外我们写:

Student stu =new Student();

stu.Age = 1000;

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

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

class="brush:csharp;gutter:false;">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的

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

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

发表评论
用户名: 匿名