2014-04-21 4 views
0

CARS 목록이 있으며 재정의 된 ToString 메서드를 사용하여 목록 상자에 목록을 표시합니다. 차 모델 (예 : 트렁크 문이 위로 열리는 자동차)에 대한 클래스를 파생 시켰으므로 파생 된 자동차 모델에 대한 기본 정보를 표시해야합니다.파생 클래스에서 다른 ToString 메서드를 사용하려면 어떻게해야합니까?

하나의 목록 상자에 CARS 목록을 표시하고 다른 목록 상자에 "해치백"정보를 표시하려면 어떻게해야합니까?

모델 클래스의 ToString을 재정의하면 CARS에도 표시하려고하는 세부 정보보다 우선합니다.

감사 죄송합니다, C#을 내 자동차 방법은

public override string ToString() 
    { 
     return Name + " [" + this.GetType().Name.ToString() + "] called " + Type; 
    } 

입니다하지만 파생 클래스를 만들 때 기본 클래스에서 하나를 때로는 파생 클래스에서 있으며, toString을 사용하려는 항상.

+2

언어를? – dognose

+0

이것을 해당 언어로 태그를 달고 시도한 코드를 게시 할 수 있습니까? –

+1

"때때로"언제? 어떤 조건에서? –

답변

0

짧은 대답은 당신이 묘사 한 것을 할 수 없다는 것입니다. 파생 클래스에서 가상 메서드를 재정의하면 파생 클래스에서 기본 클래스의 버전에 액세스 할 수 없습니다.

해치백 관련 정보를 검색하기 위해 파생 클래스에 새 메서드 또는 속성을 추가하는 것이 좋습니다.

class Car 
{ 
    public override string ToString() 
    { 
     return "some basic info"; // Whatever you want 
    } 
} 

class Hatchback : Car 
{ 
    public string HatchbackInfo 
    { 
     get{return "some hatchback info";} // Return some details only hatchbacks have 
    } 
} 

실제로 당신이 개체의 유형을 확인하고 그에 따라 행동 할 수 해치백을 할 수있는 자동차 개체의 컬렉션 소모 :

public void DoSomeStuffWithCars(List<Car> cars) 
{ 
     foreach(Car c in cars) 
     { 
      Hatchback h = c as Hatchback. 
      if(h != null) // alternatively you can use the 'is' operator 
      { 
       // do some hatchback stuff with h.HatchbackInfo 
      } 
      // logic here applies to all cars 
     } 
} 
+0

-1 가상 메서드에서 개체가 파생 된 형식에 따라 달라지는 동작. – ClickRick

+0

@ClickRick : OP는 파생 된 유형에 따라 다양한 동작을 요청하지 않았습니다. 그들은 정보를 파생 된 유형에만 연관시키는 방법을 요구했습니다. – Odrade

관련 문제