如何修复ToString方法重写问题?Sandwich类代码报错求助
帮你修复Sandwich类的代码问题,顺便补补落下的知识点~
嘿,别着急!缺课落下的内容咱们一点点理顺,先看看你代码里的几个核心问题:
核心问题拆解
- ToString方法重写的语法完全错误
你现在写的public override tomatoSlices.ToString()完全不符合C#的语法规则:重写ToString必须明确返回类型string,正确的声明格式应该是public override string ToString()。而且你把ComputerPrice()方法嵌套在了ToString方法内部,C#不允许在一个方法里直接定义另一个方法(局部函数是特殊场景,这里不适用)。 - 方法拼写错误
你写的ComputerPrice()里少了一个字母p,正确应该是ComputePrice(),这种拼写小错误也会导致编译失败。 - 对ToString重写的理解偏差
ToString是为整个类生成自定义的字符串表示,不是直接调用某个字段的ToString方法。比如你需要把三明治的名称、配料、价格等信息组合成一个清晰的字符串返回,而不是只针对番茄片数。
修正后的完整代码
class Sandwich { public string name = "Tony"; public string meat = "None"; public int tomatoSlices = 1; // 正确重写ToString方法,返回自定义的对象字符串描述 public override string ToString() { // 组合所有属性信息,还可以直接调用ComputePrice计算价格 return $"三明治详情:名称「{name}」,肉类「{meat}」,番茄片数{tomatoSlices},总价{ComputePrice():C2}"; } // 将计算价格的方法放在类的直接成员位置,不要嵌套 public double ComputePrice() { return 4.0 + (0.5 * tomatoSlices); } }
关键知识点补充
- ToString方法的作用:所有.NET类都从
object继承了ToString方法,默认只会返回类的全名,重写它可以让你的对象在被打印或转换为字符串时,展示更有意义的信息(比如上面代码里的三明治完整详情)。 - 类的结构规则:类的成员(字段、方法等)必须直接定义在类内部,不能嵌套在其他方法里,这是C#的基础语法规范。
- 字段的ToString调用:如果只是想单独获取
tomatoSlices的字符串形式,直接在需要的地方写tomatoSlices.ToString()就可以,不需要重写整个类的ToString方法。
这样修改后,你的代码就能正常编译运行啦,要是还有不明白的地方随时问~
内容的提问来源于stack exchange,提问作者CrazeSchwazey
相关产品推荐
相关产品推荐

