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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 荣右铭 中级黑马   /  2013-10-16 15:51  /  1849 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 荣右铭 于 2013-10-16 18:00 编辑

public string 户口
        {
            get { return 户口; }
            set { 户口 = value; }
        }
如果属性这样给属性字段赋值(就是属性名和get和set里面的变量重名了),程序运行时会有堆栈溢出的异常,而编译器又检查不出错误,为什么
属性到底是一个变量还是方法,如果是方法,又为什么能赋值,如果是变量,为什么又有get和set方法?

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

6 个回复

倒序浏览
完整的属性定义:
private string ab;//私有字段
public string Ab
        {
            get { return ab; }//get访问器
            set { ab= value; }//set访问器
        }
1、可以认为属性是方法的一种,被赋值的是上述代码的私有字段,
2、加上访问修饰符private,就不能擅自修改,只能通过属性,而在属性里是可以加代码来判断别人付的值是否符合你的要求,不符合的可以直接拒绝赋值,这样就增加了安全性,
3、还可以设置只读或只写

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
属性是访问器,有get访问器和set访问器,相当于二个方法一个是得到值,一个是赋值
public string 户口
        {
            get { return 户口; }
            set { 户口 = value; }
        }
属性用途:为字段赋值,保护数据,通常属性访问性为public ,字段访问性为private,外界可以通过属性得到字段的值以及为字段赋值,get set可以单独存在,即字段是只读或只写的

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报 1 0
属性是C#里面的访问器来实现的,一个get、一个set。
你可以认为是两个方法,当你给属性赋值时,就是把值存储在value内,然后自动调用set访问器里语句来给一个字段来赋值
当你把属性的值赋值给自己时,就会形成一个死循环。
有点类似于方法的递归调用,形成了死循环后占用大量的内存,自然就会造成堆栈溢出。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
黄广祯 发表于 2013-10-16 17:42
属性是C#里面的访问器来实现的,一个get、一个set。
你可以认为是两个方法,当你给属性赋值时,就是把值存 ...

你说的有道理
回复 使用道具 举报

:#谢谢支持啊。。。
回复 使用道具 举报

同学给你加分了!好好学习!蔡蔡和叶叶在黑马等着你!黑马有你更精彩!快点为了当土豪努力吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马