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

还有就是上面图片里的问题,这样写在构造里也是不能赋值的

慕工程0101907
浏览 324回答 2
2回答

哆啦的时光机

因为你定义的字段是不希望“别人”看见的,所以设置为私有的,但是方法却是可以公用的。此外,一般情况下只会对属性设置可读,限制为可写的还真没见过。这样也是为了安全性考虑。

UYOU

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