2010-08-02 9 views
2

세 가지 구현 중에서 결정하려고합니다.public 속성과 정적 읽기 전용

나는 IPerson 인터페이스를 가지고 있는데, 모든 사람 유형 (경찰, 학생, 변호사)이이를 구현합니다. 각 개인 유형마다 다른 AddressLocation (예 : 집, 사무실, 우편)이 있어야합니다. 이 위치는 결코 바뀌지 않으므로 정적/읽기 전용이 될 수 있습니다. 사람들은 일반적으로 처리되므로 SavePerson (IPerson person)은 IPerson 인터페이스에서 상속받은 모든 것을 가져오고 ID를 취하는 LoadPerson (int ID) 메서드를 사용합니다.

내 초기 솔루션은 DefaultLocation 속성을 IPerson에 추가하고 getter 만있었습니다. 이렇게하면 일반 메서드를 사용하여 데이터를 저장할 수 있습니다. 문제는 클래스의 인스턴스가 아직 없기 때문에 데이터를로드하려고 할 때 발생하므로이 속성을 참조 할 수 없습니다.

한편, 내 개인 유형마다 공개 정적 읽기 전용 DefaultLocation 속성을 만들 수 있습니다. 이 경우 Student.DefaultLocation을 호출하고이를 내 데이터를로드하는 메서드로 전달할 수 있습니다.

어떤 방법으로 가야하며 그 이유는 무엇입니까? 둘 다 장단점이있는 것으로 보입니다.

이 질문을 입력 할 때 세 번째 옵션이 나에게 왔습니다 : 클래스의 인스턴스화없이 참조 될 수있는 public static readonly proprty를 사용한 다음 호출 할 수있는 setter없이 공용 속성을 사용하면 어떻게됩니까? 일반적인 방법에서? - 각 유형의 위치는 코드의 나머지 부분에 사용할 수 있도록하려면 적어도 경우

public interface IPerson 
{ 
    LocationType DefaultLocation { get; } 
} 

public class PoliceOfficer : IPerson 
{ 
    public static readonly LocationType _DefaultLocationType = LocationType.Office; 
    public LocationType { get { return _DefaultLocationType; } } 
} 

답변

2

마지막 옵션은 나에게 최고의 하나 같은 소리 :

당 존의 조언은 내가 갔다. 그렇지 않다면 각 유형에 개인 읽기 전용 정적 필드를 사용하고 인스턴스 속성에서 해당 값을 반환합니다. (나는 위치가 불변이라고 가정하고 있습니다.)

기본적으로 약간의에서 다형성을 사용하는 것은 특정 객체의 상태 나 특정 동작에 의존하지 않는다는 점에서 비정상적인 방식이지만 상태 유형의 측면에서. 생성자에 필드가 설정된 추상 기본 클래스가 아니라 인터페이스의 속성을 사용하면 기본적으로 중복 데이터가있는 인스턴스 당 필드 하나를 사용하지 않아도됩니다.