黑马程序员技术交流社区

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

作者: 荣右铭    时间: 2013-10-16 15:51
标题: 关于属性的问题
本帖最后由 荣右铭 于 2013-10-16 18:00 编辑

public string 户口
        {
            get { return 户口; }
            set { 户口 = value; }
        }
如果属性这样给属性字段赋值(就是属性名和get和set里面的变量重名了),程序运行时会有堆栈溢出的异常,而编译器又检查不出错误,为什么
属性到底是一个变量还是方法,如果是方法,又为什么能赋值,如果是变量,为什么又有get和set方法?
作者: 面朝大海,春暖    时间: 2013-10-16 16:16
完整的属性定义:
private string ab;//私有字段
public string Ab
        {
            get { return ab; }//get访问器
            set { ab= value; }//set访问器
        }
1、可以认为属性是方法的一种,被赋值的是上述代码的私有字段,
2、加上访问修饰符private,就不能擅自修改,只能通过属性,而在属性里是可以加代码来判断别人付的值是否符合你的要求,不符合的可以直接拒绝赋值,这样就增加了安全性,
3、还可以设置只读或只写
作者: ˋ初°见    时间: 2013-10-16 16:46
属性是访问器,有get访问器和set访问器,相当于二个方法一个是得到值,一个是赋值
public string 户口
        {
            get { return 户口; }
            set { 户口 = value; }
        }
属性用途:为字段赋值,保护数据,通常属性访问性为public ,字段访问性为private,外界可以通过属性得到字段的值以及为字段赋值,get set可以单独存在,即字段是只读或只写的
作者: 黄广祯    时间: 2013-10-16 17:42
属性是C#里面的访问器来实现的,一个get、一个set。
你可以认为是两个方法,当你给属性赋值时,就是把值存储在value内,然后自动调用set访问器里语句来给一个字段来赋值
当你把属性的值赋值给自己时,就会形成一个死循环。
有点类似于方法的递归调用,形成了死循环后占用大量的内存,自然就会造成堆栈溢出。
作者: 荣右铭    时间: 2013-10-16 17:59
黄广祯 发表于 2013-10-16 17:42
属性是C#里面的访问器来实现的,一个get、一个set。
你可以认为是两个方法,当你给属性赋值时,就是把值存 ...

你说的有道理
作者: 黄广祯    时间: 2013-10-16 20:30
荣右铭 发表于 2013-10-16 17:59
你说的有道理

:#谢谢支持啊。。。
作者: 追溯客    时间: 2013-10-25 11:13

同学给你加分了!好好学习!蔡蔡和叶叶在黑马等着你!黑马有你更精彩!快点为了当土豪努力吧!





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