可能重复:
C# 中的属性和变量有什么区别
几周前我开始使用 C#,这确实困扰着我。C# 允许这些所谓的“神奇”getter 和 setter,也称为“语法糖”。所以,我可以做这样的事情:
public int myInt { get; set; }
但从封装的角度来看,这是没有意义的。一方面,数据成员是public,我可以使用点运算符获取/设置它。但是,如果我这样做:
private int myInt { get; set; }
我根本无法访问它,因为myInt is inaccessible due to protection level
. 这实际上在做什么?我认为这应该是完成数据封装的一种简单方法,所以我不必这样做:
private int myInt;
public void setMyInt(int i) { myInt = i; }
public int getMyInt() { return myInt; }
但事实并非如此。据我所知,我只是将这些变量公开。我想也许我可以做类似的事情
public int myInt { get; }
所以客户可以get
,但不能set
,但不,仍然允许公共访问。那么给了什么?
编辑 我不想做任何具体的事情,我只是想了解这实际上是如何工作的。澄清:
制作变量public
不会完成封装,尤其是当我可以使用点运算符访问它时。为变量编写 getter 和 setterprivate
可以让您对变量进行更改,但可以更好地控制实际发生的方式。