我对编码很陌生,我在使用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)
{
}
}
}发布于 2018-05-13 18:04:41
Freight.ToString()是对静态方法的调用。它混淆了编译器,因为它试图解析对从.ToString继承的非静态object的调用。
由于静态类不能覆盖成员,如果确实需要在ToString类中使用静态Freight,则需要用new public标记该方法。
嗯,我看到您的Freight不是一个静态类。
如果我把你说对了,而你想要一个逗号分隔的货物串,你只需要简单地做。
sb.Append(string.Join(", ", freights));它将隐式地调用每个元素的.ToString。
https://stackoverflow.com/questions/50318897
复制相似问题