黑马程序员技术交流社区

标题: 关于字段和属性的问题。 [打印本页]

作者: 赵科铭    时间: 2013-4-20 14:44
标题: 关于字段和属性的问题。
本帖最后由 赵科铭 于 2013-4-20 21:43 编辑

一直不明白属性和字段的区别。

还有属性到底是什么原理?比如这段代码为什么输出的还是3。
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Person1 p1 = new Person1();
  6.             p1.Age = 30;
  7.             p1.Age = p1.Age + 1;
  8.             Console.WriteLine(p1.Age);
  9.             Console.ReadKey();
  10.         }
  11.     }
  12.   
  13. class Person1
  14.     {
  15.         public int Age
  16.         {
  17.             set
  18.             { }
  19.             get
  20. { return 3; }
  21.         }
  22.     }
复制代码

作者: 陈行    时间: 2013-4-20 16:12
     public int Age

        {

            set

            { }

            get

{ return 3; }
这个get set注意到没有  set是当你对这个属性赋值时,就会执行set{}中的代码,当你读取这个属性就会执行get{}中的代码,你输出的时候就是读取属性,执行了{return 3}
所以结果永远是3,
字段和属性的关系就是 当你有一个受保护的字段时,可以通过属性中的set{}里的代码来对受保护的字段赋值,例如:
  1. int age;
  2. public int Age
  3. {
  4. set {age=value;}
  5. get{return age; }
  6. }
复制代码

作者: 陈帅    时间: 2013-4-20 16:17
你return了3,结果肯定一直是3~,你应该return age
作者: mosuge7    时间: 2013-4-20 16:40
字段:比如 private string name;写在类中,便是一个字段。
为了防止用户有时候输入错误,我们引入了属性这个概念,它含有get,set,我们通过对set里的内容修改,来修改字段的值;而get则是在读取字段内容时运行的。你的代码是   
public int Age

16.        {

17.            set

18.            { }

19.            get

20. { return 3; }

21.        }
里面的get是return了一个3,也就是说所读取的值是3,所有一直显示3.
应该改为:
class Person1

  {
      int age;
      public int Age

     { get{return age;}
        set{age=value;}
}
}
         
         

           
     }

   }
  
作者: mosuge7    时间: 2013-4-20 16:43
mosuge7 发表于 2013-4-20 16:40
字段:比如 private string name;写在类中,便是一个字段。
为了防止用户有时候输入错误,我们引入了属性这 ...

后面多写了俩括号= =
作者: 张林杰    时间: 2013-4-20 21:14
关于字段与属性的区别详细地你可以看这一贴:
http://bbs.itheima.com/forum.php ... mp;page=1#pid297376

至于代码中为什么会输出3,是因为属性其实是不保存数据的,它的数据保存在对应的字段中,
即你可以理解为属性的值其实就是get方法中的返回值,代码中set方法为空,
即可以看做该属性为只读属性,不能写入数据,那么对p1.Age进行操作时没有意义的,因为它始终为get中的返回值 3.




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