2012-03-04 127 views
0

我有一個公共類更改類屬性課外

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類中的主要程序是這樣的:通過使用此

public class DocumentManager 
{ 
    private readonly Interview _interview; 

interview = documentManager.GetInterviewSession(); 
interview.questionnaire = documentManager.GetQuestionnaireManagement(); 
interview.AnsweredQuestions = documentManager.GetInterviewAnsweredQuestions(); 

...

public DocumentManager(Interview interview) 
    { 
     _interview = interview; 

    } 

我我確定我應該封裝,但我不知道如何。任何幫助,將不勝感激。 謝謝!

回答

2

我不知道我完全得到的問題,但這是隻讀的封裝常用的方法:

public class Questionnaire 
{ 
    public string OutputFile { get; private set; } 
} 

這將創建一個名爲OutputFile可以公開讀取屬性,但只以書面類Questionnaire

或者,如果您希望從問卷調查派生的類能夠設置OutputFile,您可能需要使用protected set;

+0

謝謝,我會盡力保護套,即使還沒有任何派生類。 – dirtyw0lf 2012-03-04 23:43:13

1

如果您需要某些屬性爲immutable那麼您可以在類的構造函數中提供這些屬性。

而不是使用字段,您可以使用屬性,使您可以規定屬性getter和setter是否爲private/public/internal/protected。

在您的示例中,您可以將InterviewId作爲具有公共獲取存取器和私有唯一集訪問器的屬性。這意味着只有班級本身才能設置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; } 
    ... 
}