为什么当我使用这个类(称为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;
}
它显示错误没有找到合适的方法来覆盖?我该如何解决?
答案 0 :(得分:1)
我只是假设,考虑到写入的消息与ToString(..)
覆盖无关,因为它存在于CLR
中的所有对象的父级中,{{1所以我假设一切都是关于
object
方法。为了能够覆盖一个方法,你必须在覆盖此方法的类型的 base 类中使用相同的方法(相同的签名)声明为public override string TaxiInformation(int i){
....
}
或virtual
。
一个假设的例子:
abstract
答案 1 :(得分:0)
覆盖修饰符是扩展或修改继承方法,属性,索引器或事件的抽象或虚拟实现所必需的。
...
重写的基本方法必须与覆盖方法具有相同的签名。
例如:
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();
}
}