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
相关产品推荐
相关产品推荐

