我有以下课程(示例):
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
受保护的内部,我可以在课堂外更改此值
如果我numberOfTeeth
内部,我可以在课堂外更改此值
如果我numberOfTeeth
受保护,我就无法访问它
如果我将numberOfTeeth
公开,我可以在课堂外更改此值。
我还尝试将其设为 readonly ,但之后无法将其设置在构造函数之外。
是否有任何访问修饰符可以让我这样做?或者是否有其他方法可以实现这种保护?
答案 0 :(得分:8)
使用私人设定器创建属性:
public int NumberOfTeeth
{
get; private set;
}
注意我将其更改为Pascal Case以匹配大多数.NET样式标准。
答案 1 :(得分:2)
你做不到。您可以将该字段设置为只读,并创建一个返回其值的方法。您还可以使用公共getter和受保护的setter创建自动属性:
public int NumberOfTeeth { get; protected set; }
答案 2 :(得分:0)
public class Dog
{
public int numberOfTeeth { get; private set; }
public Dog()
{
countTeeth();
}
}
答案 3 :(得分:0)
您应该创建字段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
}
}