如何修复重写ToString方法

时间:2019-10-19 00:55:19

标签: c#

我正在使用GUI设置类,并在我的代码中需要的强制性ToString方法上遇到问题。我因参加家庭紧急旅行而错过了两节课,而现在我在这里所做的只是一点点失落。

老实说,我对所发生的事情不太了解,所以我想寻求一个解释。但是我曾尝试观看视频,并随意移动代码。

class Sandwich
{
    public string name = "Tony";
    public string meat = "None";
    public int tomatoSlices = 1;

    public override tomatoSlices.ToString()
        {
       public double ComputerPrice()
        {
              return 4.0 + (0.5 * tomatoSlices);
        }
    }
}

该程序应该运行,但是不确定为什么不运行。我想这与tomatoSlices整数有关。

2 个答案:

答案 0 :(得分:2)

如注释中所述,您已经在另一个方法内部声明了一个方法。您需要将ComputerPrice()移到ToString方法之外。另外,您需要从tomatoSlices定义中删除ToString

class Sandwich
{
    public string name = "Tony";
    public string meat = "None";
    public int tomatoSlices = 1;

    public double ComputerPrice()
    {
         return 4.0 + (0.5 * tomatoSlices);
    }

    public override string ToString()
    {
        return ComputerPrice().ToString();
    }
}

现在,当您调用sandwich.ToString()时,它将以字符串形式返回ComputerPrices()的值,例如:

var sandwich = new Sandwich();

var price = sandwich.ToString();

答案 1 :(得分:1)

要准确地说出您想要什么有点困难,但是您有一个嵌套在另一个方法中的方法,这是不合法的。

可能您想将ComputerPrice()ToString()方法中移出,然后为ToString()实现所需的内容(通常是类的字符串表示形式)。

此外,您没有将tomatoSlices指定为方法名称的一部分。覆盖基类方法时,只需使用基类方法名称ToString()。您还必须为该方法声明一个返回类型string

您可能想要做的其他事情是:

  1. 使用公共属性代替字段
  2. 对公共成员使用PascalCase
  3. 使用decimal数据类型处理货币(以避免舍入错误)

以下是解决所有这些问题的示例类:

class Sandwich
{
    public string Name { get; set; }
    public string Meat { get; set; }
    public int TomatoSlices { get; set; }

    public Sandwich()
    {
        Name = "Tony";
        Meat = "None";
        TomatoSlices = 1;
    }

    public override string ToString()
    {
        return $"This sandwich named {Name} " +
               $"has {Meat} meat and {TomatoSlices} slices of " +
               $"tomato, for a total cost of {ComputerPrice()}";

         // Or just return the price if that's what you want instead:
         // return ComputerPrice().ToString();
    }

    public decimal ComputerPrice()
    {
        return 4M + 0.5M * TomatoSlices;
    }
}