首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ToString重写ToString时出错

使用ToString重写ToString时出错
EN

Stack Overflow用户
提问于 2018-05-13 17:42:12
回答 2查看 207关注 0票数 0

我对编码很陌生,我在使用ToString覆盖时遇到了问题。当我试图在其他ToString覆盖中使用已经重载的类的ToString时,我会得到以下错误:

需要对非静态字段、方法或属性Freight.ToString()进行对象引用

请帮帮我!

代码语言:javascript
复制
 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)
         {
         }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-13 18:04:41

Freight.ToString()是对静态方法的调用。它混淆了编译器,因为它试图解析对从.ToString继承的非静态object的调用。

由于静态类不能覆盖成员,如果确实需要在ToString类中使用静态Freight,则需要用new public标记该方法。

嗯,我看到您的Freight不是一个静态类。

如果我把你说对了,而你想要一个逗号分隔的货物串,你只需要简单地做。

代码语言:javascript
复制
sb.Append(string.Join(", ", freights));

它将隐式地调用每个元素的.ToString

票数 0
EN

Stack Overflow用户

发布于 2018-05-13 18:04:06

要能够调用Freight.ToString() ToString(),必须是一个静态函数,即属于类本身的函数,它不需要调用类的任何特定实例。但是,当您将ToString转换为静态时,您将无法访问this修饰符,因为在静态方法中,没有可以引用this的实例。因此,您必须将Freight的一个实例传递给静态函数。

然后可以重写ToString()并在内部将this传递给静态函数。如果你愿意的话。

阅读静态成员:MSDN

阅读方法:MSDN

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50318897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档