更改类外的类属性
本文关键字:属性 | 更新日期: 2023-09-27 18:26:43
我有一个公共类
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;
}
我确信我应该封装,但我不确定如何封装。如有任何帮助,我们将不胜感激。谢谢
我不确定我是否完全理解这个问题,但这是只读封装的常用方法:
public class Questionnaire
{
public string OutputFile { get; private set; }
}
这将创建一个名为OutputFile
的属性,该属性可以公开读取,但只能由Questionnaire
类写入。
或者,如果希望从Questionnaire派生的类能够设置OutputFile
,则可以使用protected set;
。
如果您需要某些属性是不可变的,那么您可以在类的构造函数中提供这些属性。
此外,您可以使用允许您指定属性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; }
...
}