求分析,在C# 中的属性的意义??

我知道的是,属性是为了封装
可是,有时候属性设置为
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;}
这样的属性如何给它赋值呢?即使在类的内部也不可以(至少我还不知道)
一个从来不能被赋值的属性又有何意义呢?
属性限制字段的合理性这个我也了解的
但我看的书里很多时候在属性里没有对字段做任何特殊处理,让人很迷惑
还有就是上面图片里的问题,这样写在构造里也是不能赋值的

慕勒3428872
浏览 277回答 2
2回答

慕少森

公有属性是在任何外部类都可访问到的,如果有人不怀好意就会随意的修改的public字段,很危险的,但是如果改成private,就不能擅自修改,只能通过属性,而在属性里是可以加代码来判断别人付的值是否符合你的要求,不符合的可以直接拒绝赋值,这样就增加了安全性

侃侃尔雅

当为A赋值时内部的b变量也要改变时,用属性这个方法是最好不过的了。1int a;int b;public int A { get{ return this.a; } set{ this.a = value; this.b = value + 1; } }当然,public int A也是可以的,只是赋值和取值都只会取本身的值不会去改变其他的东西。1public int A { get; set; }在net frmaework 2.0里是不支持的。1public 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),一直保持是"圆"。
打开App,查看更多内容
随时随地看视频慕课网APP