C#类间传值异常:传入值后仍返回0,期望结果30求助
问题排查与修复方案
嘿,我一眼就看到问题出在哪了——你在调用Calculate方法的时候,传进去的是一个全新的、没赋值的Book对象,而不是你之前已经设置了价格的那个实例!
具体问题拆解:
- 你在
Main里确实创建了num这个Book实例,还给它的Price和Price2分别设了10和20:var num = new Book(); var checkNum = num.Price = 10; var checkNum2 = num.Price2 = 20; - 但后面调用
Calculate时,你写的是result.Calculate(new Book())——这个new Book()是一个完全新的对象,它的Price和Price2都是值类型的默认值0,所以计算出来的结果肯定是0+0=0,和你预期的30差远了。
修复后的代码:
只需要把已经赋值好的num实例传给Calculate就行,修改后代码如下:
public class Product { public string Title { get; set; } public int Price { get; set; } } public class Book : Product { public string Isbn { get; set; } public int Price2 { get; set; } } public class Check : Book { public int Num; public int Num2; public int Calculate(Book product) { Num = product.Price; Num2 = product.Price2; Console.WriteLine(Num2); return Num + Num2; } } class Program { static void Main(string[] args) { var num = new Book(); num.Price = 10; // 这里可以简化,不用额外变量接收赋值结果 num.Price2 = 20; var result = new Check(); var total = result.Calculate(num); // 传入已经赋值好的num实例 Console.WriteLine(total); // 输出30,符合预期 Console.WriteLine(result.Num); // 输出10 Console.WriteLine(result.Num2); // 输出20 } }
额外小提示:
- 你写的
var checkNum = num.Price = 10;语法没问题,但checkNum其实就是10,如果你不需要这个变量,直接写num.Price = 10;会更清晰。 - 另外,
Check类继承了Book,但又在Calculate里接收Book参数,这个设计有点奇怪——如果Check只是用来计算价格的工具,其实没必要继承Book,改成独立的工具类会让代码职责更明确哦。
内容的提问来源于stack exchange,提问作者victor senior
相关产品推荐
相关产品推荐

