黑马程序员技术交流社区

标题: 字段和属性的本质区别是什么? [打印本页]

作者: 小王    时间: 2014-2-8 14:02
标题: 字段和属性的本质区别是什么?
本帖最后由 小王 于 2014-2-8 17:44 编辑

字段和属性的本质区别是什么?
作者: Darkhorse′Xa    时间: 2014-2-8 15:09
本帖最后由 Darkhorse′Xa 于 2014-2-8 15:13 编辑

字段的封装就是属性.
属性用于限制调用者赋值一些非正常数据,可以限制输入.当然直接给字段赋值也是可以的,属性拥有的get,set访问器可以帮我们控制值,并且获取值!而字段是做不到的,赋值给什么值就接受什么值,无法控制输入值是否为正常数据
作者: wxfyzt    时间: 2014-2-8 16:37
上楼说的挺好,我再说一个区别,属性本身不存储数据,而数据存储在其对应的的私有字段中。
作者: 李稳023    时间: 2014-2-8 17:16
字段就是该类下储存的私有变量,属性就是对一个字段或者变量进行保护,属性分为可读,可写(这个一般很少出现)或者可读写。
在CSDN下载去有个C#入门经典视频教程,其中第三课就是对属性的描述。
作者: wushanwow    时间: 2014-2-8 18:08
以前没有属性这个说法的.后来引入属性是因为在很多时候直接使用字段不安全.然后属性可以控制是否
  1. class Test
  2.     {
  3.         //private关键字的意思就是说这个下面的变量是"不能够"被别的类访问的
  4.         //那么为了保护这个变量,如果需要被外部读取,或者只是改变的话,这样使用属性来进行保护下改变.
  5.         //首先我们定义这样一个private变量
  6.         private int i = 1234;
  7.         //然后这个变量只能被读取,不会被赋值.使用属性来进行传值.这样这个变量就不会直接暴露在用户面前.并且不会被改变.
  8.         public int age
  9.         {
  10.             //使用get让外面读取这个属性,以为这个属性是在这个类的内部,所有可以访问这个私有变量.
  11.             //当访问这个属性的时候,就返回i的值
  12.             get
  13.             {
  14.                 return i;
  15.             }
  16.             //使用set可以改变这个变量的值.
  17.             set
  18.             {
  19.                 i = value;
  20.                 Console.WriteLine("使用属性改变了i的值:"+i.ToString());
  21.             }
  22.             
  23.         }
  24.     }
  25.     class Program
  26.     {
  27.         static void Main(string[] args)
  28.         {
  29.             //首先将这个类实例化一个对象
  30.             Test test = new Test();
  31.             //然后将这个属性打印出来,这个时候看清楚了,我们读取的是这个属性,不是这个变量,私有变量在类外面是不应该被访问也是不可能被访问的.
  32.             Console.WriteLine("取得的值是:"+test.age.ToString());
  33.             //如下写法就是错误的,编译就会报错
  34.             //Console.WriteLine(test.i);
  35.             Console.ReadKey();
  36.         }
  37.     }
复制代码

作者: 小王    时间: 2014-2-8 18:16
恩,好的,理解了,谢谢给位大侠们哈
作者: 流失的温度0    时间: 2014-2-9 15:18
属性是为了保护字段的,比如人的年龄不能为复数,人是一个类,年龄就是字段,字段封装就是属性了,这个属性可以有get和set,也就是可读可写,写的时候可以通过属性来验证年龄值的有效性。因为年龄必须大于0。要注意的是属性不是用来存储数据的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2