2013-05-16 2 views
-3

나는 "Land"라는 클래스를 가지고 있으며 학교의 부모 클래스입니다. 모든 토지 클래스의 전체 인구를 포함하는 또 다른 독립적 인 클래스 "도시"가 있습니다.부모가 아닌 클래스로부터 정보 받기

학교에서 Point가 도시로부터 정보를 상속받을 수 없다면 School의 수업 정보에 액세스 할 수있는 방법이 있습니까?

시도가 private City city = new City();이고이어서 인구 정보를 추출하기 위해 city.Population 이었지만 작동하지 않았습니다. 어떤 제안?

+1

구체적인 정보는 전체적으로 클래스에 속하지 않지만 해당 클래스의 _ 인스턴스 _에 속합니다. City 클래스는 "Population"속성을 가질 수 있지만 어떤 값을 "보편적으로"알 수는 없습니다. 시의 인스턴스는 1,000,000의 인구를 가질 수 있고 다른 인스턴스는 3,000,000의 인구를 가질 수 있습니다. 이 사실을 알고 있습니까? 당신은 당신의 질문을 읽은 후에도 그렇게 보이지 않습니다. 나는 당신이이 개념들을 잘 배울 수있는 기본적인 프로그래밍 책을 읽는 것을 제안한다. –

+0

예, 동의하지만, 불행히도 지금은 할 일이 없습니다. 너를 도울 수 있으면 정말 고마워,이 과제는 5 시간 안에 끝날거야. "City"클래스의 인구를 보유하는 변수는 Public입니다. 이것이 도움이된다면. – algoBaller

+0

할 수 없습니다. 수업과 실례의 차이점을 완전히 이해하고 지식을 반영하는 방식으로 질문의 문안을 수정하는 것이 그 전제 조건입니다. 그것이 그대로 의미있는 대답을 줄 수는 없습니다. –

답변

4

is-a (상속)과 has-a (구성)을 혼동하는 것 같습니다. A SchoolCountry 또는 Land에있는 City에 있습니다. 이것은 나에게 감각적 인 디자인과 같을 것이다 : 당신은이를 통해 사용할 수 있습니다

class Land 
{ 
    public string Name { get; private set; } 

    public Land(string name) 
    { 
     this.Name = name; 
    } 
} 

class City 
{ 
    public string Name { get; private set; } 
    public Land Land { get; private set; } 
    public int Population { get; private set; } 

    public City(string name, int population, Land land) 
    { 
     this.Name = name; 
     this.Population = population; 
     this.Land = land; 
    } 
} 

class School 
{ 
    public string Name { get; private set; } 
    public City City { get; private set; } 

    public School(string name, City city) 
    { 
     this.Name = name; 
     this.City = city; 
    } 
} 

:

var land = new Land("Foo"); 
var city = new City("BarCity", 9001, land); 
var school = new School("BazSchool", city); 

이제 학교가 school.City.Population에 의해이다 도시의 인구에 액세스 할 수 있습니다.

이제 알 수 있듯이 Name 속성을 포함하는 세 가지 클래스가 있습니다. 이를 새로운 (추상) 클래스, 예를 들어 NamedEntity으로 추출 할 수 있으며, 다른 하나의 클래스는 모두 is-a이라는 이름의 엔티티로서이 클래스에서 상속받습니다.

그러나이 의견은 프로그래밍 원칙에서 제기되었으므로 이러한 원칙을 가르쳐줍니다. 그러나 당신은 이것을 배울 시간이 없다고 주장합니다. 다음 프로그래밍 과제를 어떻게 마무리 할 계획입니까?

+1

그럴 필요는 없습니다'public City City {get; 개인 집합; }'일관성을 위해서? –

+0

@CodeCaster 답변 해 주셔서 감사합니다! – algoBaller

+0

@NikitaGusev 누군가가 답변을 게시 한 경우 질문에 대한 답변으로 받아 들인 것으로 표시해야합니다. http://stackoverflow.com/about을 살펴보십시오. 매우 짧고 중요한 부분입니다. –

관련 문제