### 1. c#当中,只读属性的本质 在LoginManager当中,我们封装了loginData,将他设置为一个只读属性 public LoginData LoginData => loginData;(这个写法是表达式体属性) 照理说我们不能对其进行修改,但是后续发现,我们可以修改LoginData里面的内容 这是因为,只读属性,只是确保当前引用不会被改变,也就是栈当中的地址不会发生改变,但是栈指向的堆内存当中的数据可以修改,也就是说==只读属性只是保护了引用不被改变,而不是引用指向的对象内容。== 但如果属性封装的是一个值类型,那么因为值类型的数据存储在栈内存当中,所以值类型完全无法修改.