我有一个公共课
public class Interview
{
public int InterviewId;
public string ApplicantName;
...
public List<AnsweredQuestions> AnsweredQuestions;
public Questionnaire questionnaire;
}
并在像这样的主程序中使用它:
Interview interview = new Interview();
interview.InterviewId = 1;
和问卷调查班
public class Questionnaire
{
public int questionnaireId;
public string outputFile;
...
}
如何防止在主程序中修改属性:
interview.questionnaire.outputFile
我发现我能够在主程序中使用DocumentManager类,如下所示:
interview = documentManager.GetInterviewSession();
interview.questionnaire = documentManager.GetQuestionnaireManagement();
interview.AnsweredQuestions = documentManager.GetInterviewAnsweredQuestions();
使用此
public class DocumentManager
{
private readonly Interview _interview;
...
public DocumentManager(Interview interview)
{
_interview = interview;
}
我确定我应该封装,但我不确定如何。任何帮助,将不胜感激。 谢谢!
答案 0 :(得分:2)
我不确定我是否完全得到了这个问题,但这是只读封装的常用方法:
public class Questionnaire
{
public string OutputFile { get; private set; }
}
这会创建一个名为OutputFile
的属性,可以公开读取,但只能由Questionnaire
类编写。
或者,如果您希望从调查问卷派生的类能够设置protected set;
,则可能需要使用OutputFile
。
答案 1 :(得分:1)
如果您需要某些属性为immutable,那么您可以在类的构造函数中提供这些属性。
此外,您可以使用允许您指定属性getter和setter是private / public / internal / protected的属性来代替使用字段。
在您的示例中,您可以将InterviewId作为具有公共get访问器和仅私有set访问器的属性。这意味着只有类本身才能设置interviewId。如果设置interviewId的唯一方法是在类的构造函数中,则消费代码无法更改它(除了使用反射当然)
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; }
...
}