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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

本帖最后由 赵科铭 于 2013-4-22 17:09 编辑

为什么给p.Age赋值时,在set那一直是死循环
取p.Age时,一直在get那死循环
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Person p = new Person();
  6.              p.Age = 30;
  7.             Console.WriteLine(p.Age);
  8.             Console.ReadKey();
  9.         }
  10.     }

  11.     class Person
  12.     {
  13.         private int age;
  14.         public int Age    //死循环
  15.         {
  16.             set
  17.             {
  18.                 this.Age = value;
  19.             }
  20.             get
  21.             {
  22.                 return this.Age;
  23.             }
  24.         }
  25.     }
复制代码

评分

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

查看全部评分

4 个回复

倒序浏览
当 p.Age = 30;时,调用set方法中的this.Age = value; value为30,即将30复制给类中的Age,所以要再次调用Age中的set方法,
简单地说 p.Age = 30和this.Age = value这两个表达式其实没什么区别,都是调用set方法,get也是一样,一直在重复获取,
p.Age和this.Age差不多,一直在调用get方法,产生这种循环的本质是因为属性本身即Age是不保存数据的

评分

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

查看全部评分

回复 使用道具 举报
你要的是不是这效果呢!
你在使用set赋值时赋值错了Age;应给付给age才对,不然就会出现刚才的问题了


            Person p = new Person();
            p.Age = 30;
            Console.WriteLine(p.Age);
            Console.ReadKey();

        }
    }
    class Person
    {
        private int age;
        public int Age    //死循环
        {

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

    }

}

评分

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

查看全部评分

回复 使用道具 举报
张林杰 发表于 2013-4-21 10:39
当 p.Age = 30;时,调用set方法中的this.Age = value; value为30,即将30复制给类中的Age,所以要再次调用Ag ...

好的,我明白了,谢谢哦
回复 使用道具 举报
需要做到的是,用到set方法时this.age=value;不是this.Age=value;
用get方法时,return this.age;而不是this.Age;
这里面应该就是字段和属性的真实定义没有搞清楚
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马