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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一席倾城 高级黑马   /  2013-12-23 16:38  /  1256 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一席倾城 于 2013-12-25 16:06 编辑

调用 set 方法为一个属性设值,然后用 get 方法读取出来的值一定是 set进去的值吗?

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

4 个回复

倒序浏览
属性提供灵活的机制来读取、编写或计算某个私有字段的值,  可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。
这样属性与public字段的区别就转移到函数与字段的区别了,去访问修饰符相同的话,就是函数体中可以有执行的语句,而字段则是定义变量。
补充下,属性是可以设置访问权限的。所以,如果非得那样做,还是有些区别的。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Coding 于 2013-12-24 09:24 编辑

主要是看你怎么设置属性和字段了,如果使用传统的写法比如
private int age;
public int Age{get{return age;} set{age=value;}}
通过get获取的值可以是set设置的值, 也可以是 在当前类内部,操作age直接给age 赋值。如果age是非private的 也可以在外部类当中创建通过对象赋值。如果是 使用简便的写法 public int Age{set;get;} 这个的话 通过 get获取的值 就只能set赋的值。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
不一定,只读属性可以调用构造方法赋值,属性就是以一种公开的方法获取和设置值,同时控制set设置值的合法安全性,如果设置了合法安全的值还不读取就没有意义了吧!

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马