簡體   English   中英

在ToString覆蓋中使用ToString時出錯

[英]Error with using ToString in ToString override

我是編碼新手,使用ToString覆蓋時遇到問題。 當我嘗試在其他ToString覆蓋中使用已經重載的類的ToString時,出現此錯誤:

非靜態字段,方法或屬性Freight.ToString()需要對象引用

請幫忙!

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 namespace TruckCmopany
 {
     class Truck
     {
         private string name;
         private double weightCapacity;
         private List<Freight> freights;

         public Truck(string name,double weightCapacity)
         {
              this.Name = name;
              this.WeightCapacity = weightCapacity;
              List<Freight> freights = new List<Freight>();
         }

         public string Name
         {
             get { return name; }
             set { name = value; }
         }

         public double WeightCapacity
         {
             get { return weightCapacity; }
             set { weightCapacity = value; }
         }

         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append(this.Name).Append(" - ");

             if (freights.Count==0)
             {
                 sb.Append("Nothing loaded");
             }
             else
             {
                 sb.Append(string.Join(", ", freights)).Append(Freight.ToString());
             }

             return sb.ToString();
         }

         public IReadOnlyCollection<Freight> Freights
         {
             get => freights.AsReadOnly();
         }

         public void AddFreight(Freight freight)
         {
         }
    }
}

為了能夠調用Freight.ToString() ToString()必須是靜態函數,即,屬於類本身的函數,不需要調用該類的任何特定實例。 但是,當您將ToString轉換為靜態時,將無法訪問this修飾符,因為在靜態方法中,沒有可以使用this引用的實例。 因此,您將必須將Freight的實例傳遞給靜態函數。

然后,您可以覆蓋toString()和內傳遞this對您的靜態函數。 如果你想。

閱讀靜態成員: MSDN

閱讀方法: MSDN

Freight.ToString()是對靜態方法的調用。 它使編譯器感到困惑,因為它嘗試解析對從object繼承的非靜態.ToString的調用。

由於靜態類無法覆蓋成員,因此如果在Freight類中確實需要靜態ToString ,則需要使用new public標記該方法。


好吧,我發現您的Freight不是靜態類。

然后,如果我說對了,並且您想用逗號分隔一連串的運費,則只需

sb.Append(string.Join(", ", freights));

它將隱式地為每個元素調用.ToString

暫無
暫無

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

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