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

在第三个类构造函数中累加另外两个类的decimal属性值失败求助

问题分析与修复方案

看了你的代码,这里有几个明显的C#语法和逻辑问题,导致IDE无法正常编译,我一步步给你拆解:


1. 大小写错误:Public → public

C#是大小写敏感的语言,类的构造函数访问修饰符必须是小写的public,大写的Public属于语法错误,会直接触发编译报错。

2. 属性未绑定私有字段

你的Class1和Class2里的Value属性只是定义了空的getter和setter,没有和私有字段value关联起来。这意味着你通过构造函数传入的值根本没有被存储,后续访问class1.Value拿到的永远是decimal的默认值0,自然无法得到正确的累加结果。

3. Class3未保存传入的对象引用(规范问题)

你的Class3里定义了public Class1 class1;和public Class2 class2;字段,但构造函数里没有把传入的对象赋值给它们,这些字段会保持null,如果后续需要使用这两个对象的话会触发空引用异常。


修正后的完整代码

class Class1{
    // 用自动属性简化写法,省去手动定义私有字段
    public decimal Value { get; set; }

    public Class1(decimal value){
        Value = value;
    }
}

class Class2{
    public decimal Value { get; set; }

    public Class2(decimal value){
        Value = value;
    }
}

class Class3{
    // 用只读属性封装传入的对象,避免外部随意修改
    public Class1 Class1Instance { get; }
    public Class2 Class2Instance { get; }
    // 把累加结果单独作为一个属性暴露,更清晰
    public decimal TotalValue { get; }

    public Class3(Class1 class1, Class2 class2){
        // 保存传入的对象引用
        Class1Instance = class1;
        Class2Instance = class2;
        // 正确累加两个对象的Value属性
        TotalValue = class1.Value + class2.Value;
    }
}

额外说明

如果你坚持要用私有字段+手动属性的写法,Class1的属性可以改成这样(适合需要在get/set里加额外逻辑的场景):

private decimal _value;
public decimal Value { 
    get { return _value; } 
    set { _value = value; } 
}

不过自动属性是C#里更推荐的简洁写法,除非有特殊需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:11:25