我知道的是,属性是为了封装可是,有时候属性设置为private int a;public int A{ get{return this.a} set{this.a = value} }这样的情况使用属性来封装有什么意义吗?为什么不直接写public int a;属性还可简写为public int A {get;set;} 这样的情况我也想问上面的问题另外属性可以设置只读和只写,如果这样设置的话...例如public int A{get;}这样的属性如何给它赋值呢?即使在类的内部也不可以(至少我还不知道)一个从来不能被赋值的属性又有何意义呢?属性限制字段的合理性这个我也了解的但我看的书里很多时候在属性里没有对字段做任何特殊处理,让人很迷惑还有就是上面图片里的问题,这样写在构造里也是不能赋值的
2 回答
慕少森
TA贡献2019条经验 获得超9个赞
公有属性是在任何外部类都可访问到的,如果有人不怀好意就会随意的修改的public字段,很危险的,但是如果改成private,就不能擅自修改,只能通过属性,而在属性里是可以加代码来判断别人付的值是否符合你的要求,不符合的可以直接拒绝赋值,这样就增加了安全性
侃侃尔雅
TA贡献1801条经验 获得超16个赞
当为A赋值时内部的b变量也要改变时,用属性这个方法是最好不过的了。
1 | int a; int b; public int A { get { return this .a; } set { this .a = value; this .b = value + 1; } } |
当然,public int A也是可以的,只是赋值和取值都只会取本身的值不会去改变其他的东西。
1 | public int A { get ; set ; } |
在net frmaework 2.0里是不支持的。
1 | public int A { get ; } |
这种编译器都把它看作是ReadOnly了,无法直接赋值,但你可以进行反射或者在构建函数里改目标值:
public class ABC : Form { int a = 5; //直接赋值 public int A { get { return a; } } //如果没有构建函数,那么会返回默认值5 public ABC() { //构建函数 a = 10; //构建函数之后,再调用A会返回a的值10 } } |
【对于public int A{get;}这种就只能用反射了。】就好像一个类(球),它有个属性Type(类型)是"圆",这时你改成"正方形"就好像不对头尾了吧,本来是"球"的类,还配对"正方形",这时你就需要不让用户修改这个值(ReadOnly),一直保持是"圆"。
添加回答
举报
0/150
提交
取消