当我调用ToString时,找不到合适的方法来覆盖C#

时间:2012-10-27 10:28:02

标签: c# windows

为什么当我使用这个类(称为TaxiStation)时调用的是Taxi Class的字符串:

public override string TaxiInformation(int i)
        {

            return taxiCollectionDrivers[i].ToString();

        }

出租车类的ToString():

public override string ToString()
        {
     string str;
     str = "Taxi ID: " + this.taxiId + "\nDriver Name: " + this.driverName + "\nPassengers " + this.numPass + "\nTotal Passengers: " + totalPassengers + "\nRate Per Kilometer: " + this.ratePerKilometer+
         "\n\n Available: " + this.available ; 
     return str;    
        }

它显示错误没有找到合适的方法来覆盖?我该如何解决?

2 个答案:

答案 0 :(得分:1)

我只是假设,考虑到写入的消息与ToString(..)覆盖无关,因为它存在于CLR中的所有对象的父级中,{{1所以我假设一切都是关于

object

方法。为了能够覆盖一个方法,你必须在覆盖此方法的类型的 base 类中使用相同的方法(相同的签名)声明为public override string TaxiInformation(int i){ .... } virtual

一个假设的例子:

abstract

答案 1 :(得分:0)

  

覆盖修饰符是扩展或修改继承方法,属性,索引器或事件的抽象虚拟实现所必需的。

     

...

     

重写的基本方法必须与覆盖方法具有相同的签名

MSDN: override (C# Reference)

例如:

public abstract class MyBaseClass
{
   public abstract void Foo(int i);
}

public class MyBaseClass
{
   public virtual void Foo(int i)
   {
      // ...
   }
}

方法无法覆盖的另一个原因是因为它已在基类中标记为 sealed

public class ClassA // Inherited from object
{
    public sealed override string ToString()
    {
        return base.ToString();
    }
}

public class ClassB : ClassA
{
    // Compilation error!
    public override string ToString()
    {
        return base.ToString();
    } 
}