1

为什么当我使用这个类(称为 TaxiStation)时,它调用了出租车类的 toString:

public override string TaxiInformation(int i)
        {

            return taxiCollectionDrivers[i].ToString();

        }

Taxi 类的 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;    
        }

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

4

2 回答 2

1

我只是假设,考虑到写入的消息不能与ToString(..)覆盖相关,因为它存在于所有对象的父级CLRobject,所以我这都是关于

public override string TaxiInformation(int i){
   ....
}

方法。为了能够覆盖一个方法,您必须在该方法被覆盖的类型的类中拥有与声明类似的相同方法(相同签名)virtualabstract

一个假设的例子:

public class TaxiStation
{
  ..... 
    public virtual string TaxiInformation(int i){
       ....
    }

}


public class Taxi : TaxiStation 
{
    public override string TaxiInformation(int i){
       ....
    }
}
于 2012-10-27T10:32:03.177 回答
0

需要 override 修饰符来扩展或修改继承的方法、属性、索引器或事件的抽象虚拟实现。

...

被覆盖的基方法必须与覆盖方法具有相同的签名

MSDN:覆盖(C# 参考)

例如:

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

或者

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

方法不可用于覆盖的另一个原因是它已在基类中标记为密封:

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();
    } 
}
于 2012-10-27T11:10:05.280 回答