如何在派生类中使用不同的ToString方法?

时间:2014-04-21 12:40:05

标签: c# tostring

我有一个CARS列表,我使用覆盖的ToString方法在列表框中显示列表。 我已经为汽车模型派生了类(例如掀背车),我需要显示有关派生汽车模型的更多信息,而不会丢失基本的tostring方法。

如何在一个列表框和"掀背车"中显示CARS列表?不同列表框中的详细信息。

如果我覆盖Models类中的ToString,它会覆盖我试图为CARS显示的细节。

由于 对不起,C# 我的汽车方法是

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

但是当我创建派生类时,我有时想要使用派生类中的ToString,而不是总是来自基类的ToString。

1 个答案:

答案 0 :(得分: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
     }
}

当消耗可能实际上是掀背车的Car对象集合时,您可以检查对象的类型并采取相应的行动:

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
      }
}