我有以下课程(示例):

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样式的标准。

10-04 10:16