首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类之外更改类属性

在类之外更改类属性
EN

Stack Overflow用户
提问于 2012-03-05 07:09:03
回答 2查看 92关注 0票数 0

我有一堂公开课

代码语言:javascript
复制
 public class Interview
{
    public int InterviewId;
    public string ApplicantName;
    ...
    public List<AnsweredQuestions> AnsweredQuestions;
    public Questionnaire questionnaire;

}

在主程序中使用它,如下所示:

代码语言:javascript
复制
 Interview interview = new Interview();
 interview.InterviewId = 1;

和一个调查问卷班

代码语言:javascript
复制
public class Questionnaire
{
    public int questionnaireId;
    public string outputFile;
    ...
}

如何防止修改主程序中的属性:

代码语言:javascript
复制
interview.questionnaire.outputFile

我发现我能够在主程序中使用DocumentManager类,如下所示:

代码语言:javascript
复制
interview = documentManager.GetInterviewSession();
interview.questionnaire = documentManager.GetQuestionnaireManagement();
interview.AnsweredQuestions = documentManager.GetInterviewAnsweredQuestions();

通过使用这个

代码语言:javascript
复制
public class DocumentManager
{
    private readonly Interview _interview;

..。

代码语言:javascript
复制
public DocumentManager(Interview interview)
    {
        _interview = interview;

    }

我确信我应该进行封装,但我不确定如何实现。任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-05 07:34:28

我不确定我是否完全理解了这个问题,但这是只读封装的常用方法:

代码语言:javascript
复制
public class Questionnaire
{
    public string OutputFile { get; private set; }
}

这将创建一个名为OutputFile的属性,该属性可以公开读取,但只能由Questionnaire类写入。

或者,如果您希望从调查问卷派生的类能够设置OutputFile,则可能需要使用protected set;

票数 2
EN

Stack Overflow用户

发布于 2012-03-05 07:34:59

如果您需要某些属性为immutable,那么您可以在类的构造函数中提供这些属性。

此外,您可以使用允许您指定属性getter和setter是否是私有/公共/内部/受保护的属性,而不是使用字段。

在您的示例中,可以将InterviewId作为具有公共get访问器和私有only set访问器的属性。这意味着只有类本身可以设置interviewId。如果设置interviewId的唯一方法是在类的构造函数中,那么消费代码就没有办法更改它(当然除了使用反射之外)

代码语言:javascript
复制
public class Questionnaire
{

    public Questionnaire(int questionnaireId, string outputFile)
    {
         QuestionnaireId = questionnaireId;
         OutputFile = outputFile
    } 

    public int QuestionnaireId {get; private set;} 
    public string OutputFile { get; private set; }
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9559726

复制
相关文章

相似问题

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