我有一堂公开课
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;
}我确信我应该进行封装,但我不确定如何实现。任何帮助都将不胜感激。谢谢!
发布于 2012-03-05 07:34:28
我不确定我是否完全理解了这个问题,但这是只读封装的常用方法:
public class Questionnaire
{
public string OutputFile { get; private set; }
}这将创建一个名为OutputFile的属性,该属性可以公开读取,但只能由Questionnaire类写入。
或者,如果您希望从调查问卷派生的类能够设置OutputFile,则可能需要使用protected set;。
发布于 2012-03-05 07:34:59
如果您需要某些属性为immutable,那么您可以在类的构造函数中提供这些属性。
此外,您可以使用允许您指定属性getter和setter是否是私有/公共/内部/受保护的属性,而不是使用字段。
在您的示例中,可以将InterviewId作为具有公共get访问器和私有only 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; }
...
}https://stackoverflow.com/questions/9559726
复制相似问题