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

C#多级继承场景下Cheque子类构造函数跳转至Ahorro父类问题求解

问题原因
  • C#实例化派生类时,默认会优先执行父类的无参构造函数,你的Ahorro类无参构造函数内部包含了死循环交互菜单逻辑,只要用户不选择退出或返回主菜单,代码会一直卡在Ahorro的构造执行流程中,永远不会走到Cheque构造函数的内容。
  • 额外逻辑错误:Cheque类的Depositar/Retirar/VerBalance方法都新建了独立的Ahorro实例,操作的不是当前Cheque对象继承来的属性,既没有复用父类逻辑,也会出现数据不同步的问题。
解决方案

1. 拆分父类构造函数的业务逻辑

把Ahorro类的交互菜单逻辑从构造函数中抽离成独立方法,构造函数仅做基础属性初始化:

// 修改Ahorro类构造,移除所有交互、循环逻辑
public Ahorro()
{
    // 仅保留必要的属性初始化代码即可
}

// 新增独立的菜单方法,用virtual关键字方便子类重写
public virtual void MostrarMenu()
{
    // 把原来写在Ahorro构造里的所有交互、循环代码全部迁移到此处
    int opc = 0;
    Console.WriteLine("Entre numero de la cuenta");
    Numero = Console.ReadLine();
    Console.WriteLine("Entre el deposito inicial");
    depositoInicial = Convert.ToDouble(Console.ReadLine());
    // 剩余原有菜单逻辑直接照搬即可
}

2. 调整Cheque类逻辑

显式指定调用父类空构造,重写菜单方法,修正父类逻辑复用方式:

public class Cheque: Ahorro
{
    double depositoInicial;
    string[] args;

    // 显式调用父类空构造,不会触发原有父类菜单逻辑
    public Cheque() : base()
    {
        
    }

    // 重写父类菜单方法,放置Cheque专属交互逻辑
    public override void MostrarMenu()
    {
        // 把原来写在Cheque构造里的所有交互、循环代码全部迁移到此处
        int opc = 0;
        Console.WriteLine("Entre numero de la cuenta");
        Numero = Console.ReadLine();
        Console.WriteLine("Entre el deposito inicial");
        depositoInicial = Convert.ToDouble(Console.ReadLine());
        // 剩余原有Cheque菜单逻辑直接照搬即可
    }
    
    // 修正方法复用逻辑,不要新建Ahorro实例,直接调用父类同名方法操作当前对象属性
    public double Depositar(double deposito)
    {
        base.Depositar(deposito);
        return 0; 
    }
    public string Retirar(double retiro)
    {
        base.Retirar(retiro);
        return "";
    }
    public void VerBalance()
    {
        base.VerBalance();
    }
}

3. 调整实例化调用逻辑

实例化Cheque对象后主动调用菜单方法触发交互即可:

Cheque miCuentaCheque = new Cheque();
miCuentaCheque.MostrarMenu();

内容的提问来源于stack exchange,提问作者Felipe Xavier Diaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:01