我有以下课程(示例):
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 公共,我可以在类之外更改这个值。
我还尝试使它成为只读,但后来无法在构造函数之外设置它。
是否有任何访问修饰符允许我这样做?还是有其他方法来实现这种保护呢?
发布于 2012-11-15 15:47:06
使用私有setter创建一个属性:
public int NumberOfTeeth
{
get; private set;
}注意,我将其更改为Pascal大小写,以匹配大多数.NET样式标准。
发布于 2012-11-15 15:46:54
你不能这么做。您可以使字段为只读,并创建一个返回其值的方法。您还可以使用公共getter和受保护的setter创建一个自动属性:
public int NumberOfTeeth { get; protected set; }发布于 2012-11-15 15:47:40
您应该将字段设置为private,并创建一个只读(无setter) 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
}
}https://stackoverflow.com/questions/13401045
复制相似问题