선거 결과를 저장할 클래스를 만듭니다. 내가 파일을 구문 분석하고 파일에서 결과와 결과 클래스를 반환합니다 정적 메서드가 결과 클래스가 있습니다.내부적으로 수정할 수있는 읽기 전용 속성 노출
내부 수정 자 (Precinct.InternalCandidates)를 사용하고 있기 때문에 정적 메서드 만 결과를 수정할 수 있습니다. (이 메서드는 dll 밖에있는 클래스의 인스턴스가 메서드에 액세스하는 것을 방지합니다. ?).
어쨌든, 후보 클래스를 인스턴스화 된 버전의 클래스에 읽기 전용 목록으로 노출해야하지만 채우기 프로세스 중에 후보를 추가 할 수 있어야합니다. 여기
Results r = Results.ParseResultsFile("PathToFile.txt");
r.Candidates.Add(new Candidate) // Should error here
Console.WriteLine(r.Candidates[0].Name) // Should work
I가있는 무엇 : 그래서,
여기내가 구상 것 어떻게 작동하는 것 InternalCandidates의 읽기 전용 버전을 공개 Precinct.Candidates는 선거구 클래스의 다른 매개 변수라고 만들었습니다 내 수업 스텁 :
public class Results {
private List<Precinct> precincts = new List<Precinct>();
public ReadOnlyCollection<Precinct> Precincts {
get { return this.precincts.AsReadOnly(); }
}
public Results() {}
public static Results ParseResultsFile(string filePath) { ... }
}
public class Precinct {
internal List<Contest> InternalContests { get; set; }
public ReadOnlyCollection<Contest> Contests {
get { return this.InternalContests.AsReadOnly(); }
}
public Precinct {
this.InternalContests = new List<Contest>();
}
}
더 좋은 방법이 있나요?
FullTrust가 모든 것을 무시하므로 그 속성은 도움이되지 않습니다. – leppie
또한 해당 특성은 * 호출 프로그램 *에 적용되어야하며 * 호출 수신자 * 어셈블리에는 적용되지 않아야합니다. 그래서 Rob은 자신의 공격자가 정중 한 태도로 자신의 성찰을 거부 할 수있는 경우에만 자신을 보호 할 수 있습니다 ** 웃음 **. 그리고 그가 .NET 4로 이동할 때 그 속성은 무시 될 것입니다. – itowlson
좋아요 ... 나는 그것을하는 악의적 인 사람에 대해 정말로 걱정하지 않습니다. 실제로 데이터를 엉망으로 만들고 싶다면 텍스트 파일 만 변경하면됩니다. 이것은 나의 팀 (당신이 읽었습니다 : 저)이 우연히 Precinct.Candidates.Add()와 같이 어리석은 일을하지 않도록하는 것입니다. 동일한 것을 가리키는 내부 및 공개 속성을 모두 갖고있는 것이 최선의 방법 일지 궁금합니다. InternalContests를 가질 필요는 없지만 Contests.Add는 내부 용으로 만 만들면됩니다. 어쩌면 List <>를 사용하지 않고 내 자신을 파생시킬 필요가 있을까요? – Rob