为了账号安全,请及时绑定邮箱和手机立即绑定

请看如下图片内容,求问在C# 中的属性的意义!

请看如下图片内容,求问在C# 中的属性的意义!

慕工程0101907 2021-11-19 15:11:29
我知道的是,属性是为了封装可是,有时候属性设置为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贡献1779条经验 获得超6个赞

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

查看完整回答
反对 回复 2021-11-24
?
UYOU

TA贡献1878条经验 获得超4个赞

当为A赋值时内部的b变量也要改变时,用属性这个方法是最好不过的了。

12int a;int b;public int A { getreturn this.a; } setthis.a = value; this.b = value + 1; } }

当然,public int A也是可以的,只是赋值和取值都只会取本身的值不会去改变其他的东西。


public int A { getset; }

在net frmaework 2.0里是不支持的。


public int A { get; }

这种编译器都把它看作是ReadOnly了,无法直接赋值,但你可以进行反射或者在构建函数里改目标值:


public class ABC : Form {    int a = 5; //直接赋值    public int A { getreturn a; } } //如果没有构建函数,那么会返回默认值5    public ABC() { //构建函数        a = 10; //构建函数之后,再调用A会返回a的值10    }}

【对于public int A{get;}这种就只能用反射了。】就好像一个类(球),它有个属性Type(类型)是"圆",这时你改成"正方形"就好像不对头尾了吧,本来是"球"的类,还配对"正方形",这时你就需要不让用户修改这个值(ReadOnly),一直保持是"圆"。



查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信