黑马程序员技术交流社区

标题: 属性的问题 [打印本页]

作者: 赵科铭    时间: 2013-4-21 10:24
标题: 属性的问题
本帖最后由 赵科铭 于 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.     }
复制代码

作者: 张林杰    时间: 2013-4-21 10:39
当 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是不保存数据的
作者: 极限冰风    时间: 2013-4-21 10:40
你要的是不是这效果呢!
你在使用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;
            }
        }

    }

}
作者: 赵科铭    时间: 2013-4-21 10:48
张林杰 发表于 2013-4-21 10:39
当 p.Age = 30;时,调用set方法中的this.Age = value; value为30,即将30复制给类中的Age,所以要再次调用Ag ...

好的,我明白了,谢谢哦
作者: 魏庆君    时间: 2013-4-21 12:03
需要做到的是,用到set方法时this.age=value;不是this.Age=value;
用get方法时,return this.age;而不是this.Age;
这里面应该就是字段和属性的真实定义没有搞清楚




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