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

Winform C#不同类间用Get/Set传值报CS0120错误及结果回传问题

问题原因与解决方案

错误触发原因

CS0120错误的官方定义为「非静态的字段、方法或属性要求对象引用」,你当前代码中MathFirstClass的Left、Right、Add_Operands都属于实例成员,必须先创建类的实例对象才能访问,直接通过类名访问就会触发该错误。

修复步骤

  • 第一步:声明MathFirstClass的实例对象,你可以选择在窗体类的全局范围声明(支持多个方法复用)或者在点击事件内部声明(仅当前事件使用)
  • 第二步:通过实例对象完成属性赋值、运算结果读取操作

修改后的代码示例

按钮点击事件代码

// 可在窗体类全局声明,方便多个方法复用该实例
private MathFirstClass mathCalc = new MathFirstClass();

private void btn_Compute_Click(object sender, EventArgs e)
{
    decimal dL = Validator(box_Left.Text);
    decimal dR = Validator(box_Right.Text);
    decimal Answer = 0;
    string op = "";
    if (rad_Add.Checked == true)
    {
        // 通过实例对象赋值属性
        mathCalc.Left = dL;
        mathCalc.Right = dR;
        op = " + ";
        // 直接读取实例的Add_Operands属性获取计算结果,完成值回传
        Answer = mathCalc.Add_Operands;
        // 可直接将结果输出到界面控件,示例:
        box_Result.Text = $"{dL}{op}{dR} = {Answer}";
    }
}

MathFirstClass类代码无需修改,原有逻辑可正常运行

额外扩展说明

如果你希望直接通过类名访问成员不需要实例,也可以把MathFirstClass的所有成员都标记为static,但这种方案适合不需要保存状态的工具类场景,你当前的需求使用实例成员更合理。

内容的提问来源于stack exchange,提问作者KyleC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:10