You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:05:20