簡體   English   中英

當我調用ToString時,找不到適合的方法來覆蓋C#

[英]no suitable method found to override C# when i call ToString

為什么當我使用該類(稱為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中所有對象的父對象中,在object ,所以我這是關於

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){
       ....
    }
}

必須使用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();
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM