我正在使用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整数有关。
答案 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
。
您可能想要做的其他事情是:
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;
}
}