我有以下课程(示例):
public class Dog
{
int numberOfTeeth;
public Dog()
{
countTeeth();
}
private void countTeeth()
{
this.numberOfTeeth = 5; //this dog has seen better days, apparently
}
}
在我创建dog对象之后,应该计算出它的齿数。我希望能够访问该值,而不必在类本身之外修改它。
Dog d = new Dog();
int dogTeeth = d.numberOfTeeth; //this should be possible
d.numberOfTeeth = 10; //this should not
但是,我不知道哪个访问修饰符允许我这样做。我试过以下所有的方法:
如果我将
numberOfTeeth
设为私有,则无法访问它。如果我将
numberOfTeeth
设置为内部受保护,则可以在类之外更改此值。如果我将
numberOfTeeth
设置为内部,我可以在类之外更改此值。如果我设置了
numberOfTeeth
保护,我就无法访问它。如果我将
numberOfTeeth
公开,我可以在类之外更改此值。我也尝试将其设置为只读,但随后无法将其设置在构造函数之外。
有允许我这样做的访问修饰符吗?或者有其他方法来实现这种保护吗?
最佳答案
使用私有setter创建属性:
public int NumberOfTeeth
{
get; private set;
}
注意,我将其改为pascal case以匹配大多数.net样式的标准。