如何使字段只在课外读取
我有以下类(示例):
public class Dog { int numberOfTeeth; public Dog() { countTeeth(); } private void countTeeth() { this.numberOfTeeth = 5; //this dog has seen better days, apparently } }
在我创建狗对象后,它应该计算出牙齿的数量。 我希望能够访问该值,而无法在类本身之外修改它。
Dog d = new Dog(); int dogTeeth = d.numberOfTeeth; //this should be possible d.numberOfTeeth = 10; //this should not
但是,我无法弄清楚哪个访问修饰符会让我这样做。 我已经尝试了以下所有方法:
如果我将numberOfTeeth
私有 ,则无法访问它。
如果我将numberOfTeeth
保护为internal ,我可以在类之外更改此值。
如果我将numberOfTeeth
内部 ,我可以在类之外更改此值。
如果我使numberOfTeeth
受到保护 ,我无法访问它。
如果我将numberOfTeeth
公开 ,我可以在类之外更改此值。
我也尝试将其设为readonly,但后来无法在构造函数之外设置它。
是否有任何访问修饰符可以让我这样做? 或者是否有其他方法可以实现这种保护?
使用私有setter创建属性:
public int NumberOfTeeth { get; private set; }
请注意,我将其更改为Pascal Case以匹配大多数.NET样式标准。
你不能这样做。 您可以将该字段设置为只读,并创建一个返回其值的方法。 您还可以使用公共getter和受保护的setter创建一个auto-property:
public int NumberOfTeeth { get; protected set; }
public class Dog { public int numberOfTeeth { get; private set; } public Dog() { countTeeth(); } }
您应该将该字段private
并创建只读(无设置器) public
属性:
public class Dog { private int numberOfTeeth; public int NumberOfTeeth {get {return numberOfTeeth;}} public Dog() { countTeeth(); } private void countTeeth() { this.numberOfTeeth = 5; //this dog has seen better days, apparently } }