为什么当我使用这个叫TaxiStation的class级(叫TaxiStation)的时候,
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; }
这是显示错误没有合适的方法发现重写? 我如何解决它?
我只是想 ,考虑到写入的消息不能与ToString(..)
重叠相关,因为它存在于CLR
的所有对象的父对象中,所以我想这是所有
public override string TaxiInformation(int i){ .... }
方法。 为了能够覆盖一个方法,你必须在这个方法被重写的类型的基类中拥有相同的方法(相同的签名)声明为virtual
或abstract
。
一个假设的例子:
public class TaxiStation { ..... public virtual string TaxiInformation(int i){ .... } } public class Taxi : TaxiStation { public override string TaxiInformation(int i){ .... } }
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(); } }