A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵科铭 中级黑马   /  2013-4-20 14:44  /  1510 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵科铭 于 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.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

5 个回复

倒序浏览
     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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
你return了3,结果肯定一直是3~,你应该return age
回复 使用道具 举报
字段:比如 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;}
}
}
         
         

           
     }

   }
  

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

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

后面多写了俩括号= =
回复 使用道具 举报
关于字段与属性的区别详细地你可以看这一贴:
http://bbs.itheima.com/forum.php ... mp;page=1#pid297376

至于代码中为什么会输出3,是因为属性其实是不保存数据的,它的数据保存在对应的字段中,
即你可以理解为属性的值其实就是get方法中的返回值,代码中set方法为空,
即可以看做该属性为只读属性,不能写入数据,那么对p1.Age进行操作时没有意义的,因为它始终为get中的返回值 3.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马