首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使字段仅在类之外读取

如何使字段仅在类之外读取
EN

Stack Overflow用户
提问于 2012-11-15 15:44:49
回答 4查看 3.7K关注 0票数 5

我有以下课程(示例):

代码语言:javascript
运行
复制
public class Dog
{
    int numberOfTeeth;

    public Dog() 
    { 
        countTeeth(); 
    }

    private void countTeeth()
    {
        this.numberOfTeeth = 5; //this dog has seen better days, apparently
    }

}

在我创建了狗对象之后,它应该有计算牙齿的数量。我希望能够访问这个值,而不需要在类本身之外修改它。

代码语言:javascript
运行
复制
Dog d = new Dog();
int dogTeeth = d.numberOfTeeth; //this should be possible
d.numberOfTeeth = 10; //this should not

但是,我不知道哪个访问修饰符会让我这么做。我试过以下所有的方法:

如果我将numberOfTeeth 设置为私有,则无法访问它。

如果使numberOfTeeth 保护内部,则可以在类之外更改此值。

如果生成numberOfTeeth 内部,则可以在类之外更改此值。

如果我使numberOfTeeth 保护了,我就无法访问它。

如果我使numberOfTeeth 公共,我可以在类之外更改这个值。

我还尝试使它成为只读,但后来无法在构造函数之外设置它。

是否有任何访问修饰符允许我这样做?还是有其他方法来实现这种保护呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-15 15:47:06

使用私有setter创建一个属性:

代码语言:javascript
运行
复制
public int NumberOfTeeth
{
 get; private set;
}

注意,我将其更改为Pascal大小写,以匹配大多数.NET样式标准。

票数 10
EN

Stack Overflow用户

发布于 2012-11-15 15:46:54

你不能这么做。您可以使字段为只读,并创建一个返回其值的方法。您还可以使用公共getter和受保护的setter创建一个自动属性:

代码语言:javascript
运行
复制
public int NumberOfTeeth { get; protected set; }
票数 2
EN

Stack Overflow用户

发布于 2012-11-15 15:47:40

您应该将字段设置为private,并创建一个只读(无setter) public属性:

代码语言:javascript
运行
复制
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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13401045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档