如何在C#的BmrCalculator类中访问已赋值的BMIcalculator实例
解决WinForms中BMR计算器访问已赋值BMI实例的问题
你之前在BmrCalculator里新建BMIcalculator实例拿不到值,是因为每一次new BMIcalculator()都会生成一个全新的对象,和MainForm里用户输入后赋值的那个实例完全没关系,所以新对象的height、weight自然是空的。下面给你两种简单好懂的方法,不用新建对象就能拿到已赋值的数据:
方法一:把已有的BMI实例传给BmrCalculator(推荐新手)
1. 修改BmrCalculator类
给它加一个带参数的构造函数,把MainForm里的BMI实例存下来,之后计算BMR的时候直接用这个存好的实例:
public class BmrCalculator { // 保存传入的BMI实例 private readonly BMIcalculator _bmiInstance; // 带参数的构造函数 public BmrCalculator(BMIcalculator bmiInstance) { _bmiInstance = bmiInstance; } // 计算BMR的方法,直接用保存的实例取height和weight public double CalculateBmr() { // 这里写你的BMR计算逻辑,比如男性公式:(10×体重)+(6.25×身高)-(5×年龄)+5 double height = _bmiInstance.Height; double weight = _bmiInstance.Weight; // 替换成你的实际计算逻辑 return (10 * weight) + (6.25 * height) - 5; } }
2. 在MainForm里调用BmrCalculator
当你需要计算BMR的时候,把已经赋值好的BMI实例传给BmrCalculator的构造函数,不用再new新的BMI对象:
// MainForm里已有的代码:用户输入后赋值的BMI实例 var bmiCalculator = new BMIcalculator(); bmiCalculator.Height = double.Parse(txtHeight.Text); // 假设txtHeight是输入身高的文本框 bmiCalculator.Weight = double.Parse(txtWeight.Text); // txtWeight是输入体重的文本框 // 创建BmrCalculator时传进已赋值的实例 var bmrCalculator = new BmrCalculator(bmiCalculator); double bmrResult = bmrCalculator.CalculateBmr(); // 把结果显示出来,比如lblBmrResult是显示结果的标签 lblBmrResult.Text = $"你的BMR值是:{bmrResult:F2}";
方法二:直接把身高体重作为参数传给BMR计算方法
如果不想传整个实例,也可以直接把height和weight的值传给计算方法:
1. 修改BmrCalculator类的计算方法
public class BmrCalculator { public double CalculateBmr(double height, double weight) { // 同样写你的BMR计算逻辑 return (10 * weight) + (6.25 * height) - 5; } }
2. 在MainForm里调用
// 已赋值的BMI实例 var bmiCalculator = new BMIcalculator(); bmiCalculator.Height = double.Parse(txtHeight.Text); bmiCalculator.Weight = double.Parse(txtWeight.Text); // 调用计算方法时直接传值 var bmrCalculator = new BmrCalculator(); double bmrResult = bmrCalculator.CalculateBmr(bmiCalculator.Height, bmiCalculator.Weight); lblBmrResult.Text = $"你的BMR值是:{bmrResult:F2}";
这两种方法都能解决你新建对象拿不到值的问题,方法一更贴合你“访问已赋值实例getter”的需求,方法二更灵活,选哪个都可以,根据你的代码习惯来就行。
内容的提问来源于stack exchange,提问作者Junus
相关产品推荐
相关产品推荐

