C# 继承 class 构造函数重定向到父 class

C# Inherited class constructor redirects to parent class

我是 C# 新手。我已经阅读了多级继承及其工作原理。我的程序具有多级继承。父代 class 是 Cuenta,classes Prestamo 和 Ahorro 均派生自其父代 class。代码没有显示错误;但是,当程序到达 Check 构造函数时,它会将我重定向到 Ahorro class,而不是执行 Check 构造函数中的其余代码。知道如何解决这个问题吗?任何帮助将不胜感激。

检查class的代码如下:

using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProyectoFinal
{
    public class Cheque: Ahorro
    {
        double depositoInicial;

        string[] args;
        
        public 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());
              do
              {
              Input:

                  Console.WriteLine("Escoja una opcion");

                  Console.WriteLine("1. Crear cuenta de cheque");
                  Console.WriteLine("2. Añadir deposito a cuenta de cheque ");
                  Console.WriteLine("3. Retirar dinero de cuenta de cheque ");
                  Console.WriteLine("4. Calcular intereses (se puede entrar una nueva cantidad de dinero)");
                  Console.WriteLine("5. Ver Balance");
                  Console.WriteLine("6. Ir al menu principal");
                  opc = Int16.Parse(Console.ReadLine());
                  if (opc == 1)
                  {
                      Cheques(depositoInicial);
                      goto Input;
                  }
                  else if (opc == 2)
                  {
                      double deposito = 0;
                      Depositar(deposito);
                      goto Input;
                  }
                  else if (opc == 3)
                  {
                      double retiro = 0;
                      Retirar(retiro);
                      goto Input;
                  }
                  else if (opc == 4)
                  {
                      VerBalance();
                      goto Input;
                  }
                else if (opc == 5)
                {
                    Program.Main(args);
                }
                else if (opc > 5 || opc < 1)
                  {
                      Environment.Exit(0);
                  }
              } while (opc > 5 || opc < 1);
              Console.WriteLine();
          } 
        
        public double Cheques(double depositoInicial)
        {
            double code = 0;
            BalanceInicial = depositoInicial;
            BalanceActual = depositoInicial;
            TipoCuenta = "Checks";
            Intereses = 0;
            Console.WriteLine($"Balance Inicial y balace actual iniciados a {depositoInicial}");
            return code;
        }
       public double Depositar(double deposito)
        {
               new Ahorro().Depositar(deposito);
               return 0; 
        }
       public string Retirar(double retiro)
        {
            new Ahorro().Retirar(retiro);
            return "";
        }

        public void VerBalance()
        {
            new Ahorro().VerBalance();
           
        }
    }
}

Ahorroclass的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProyectoFinal
{
    public class Ahorro: Cuenta
    {
        public double Intereses;
        string UltimaTransaccion;

        double depositoInicial;
        string[] args;
        public 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());
            do
            {
            Input:
                
                Console.WriteLine("Escoja una opcion");
                
                Console.WriteLine("1. Crear cuenta de ahorro o de cheque");
                Console.WriteLine("2. Añadir deposito a cuenta de ahorro o de cheque ");
                Console.WriteLine("3. Retirar dinero de cuenta de ahorro o de cheque");
                Console.WriteLine("4. Calcular intereses (se puede entrar una nueva cantidad de dinero, No se puede usar con cuenta de cheques)");
                Console.WriteLine("5. Ver Balance");
                Console.WriteLine("6. Ir al menu principal");
                opc = Int16.Parse(Console.ReadLine());
                if (opc == 1)
                {
                    Ahorros(depositoInicial);
                    goto Input;
                }
                else if (opc == 2)
                {
                    double deposito = 0;
                    Depositar(deposito);
                    goto Input;
                }
                else if (opc == 3)
                {
                    double retiro = 0;
                    Retirar(retiro);
                    goto Input;
                }
                else if (opc == 4)
                {
                    double cantidad = 0;
                    double intereses = 0;
                    CalcularInteres(cantidad, intereses);
                    goto Input;
                }
                else if (opc == 5)
                {
                    VerBalance();
                    goto Input;
                }
                else if (opc == 6)
                {
                    Program.Main(args);
                }
                
                else if (opc > 6|| opc < 1)
                {
                    Environment.Exit(0);
                }
            } while (opc > 6 || opc  < 1);
            Console.WriteLine();
        }   
        public string Ahorros(double depositoInicial)
        {
            double deposito = 0;
            BalanceInicial = depositoInicial;
            BalanceActual = depositoInicial;
            Console.WriteLine("Que tipo de cuenta usted desea crear?");
            string cuenta = Console.ReadLine();
            if (cuenta == "Ahorro" || cuenta == "ahorro")
            {
                TipoCuenta = "Savings";
                Intereses = 0.06;
            } else if (cuenta == "Cheque" || cuenta == "cheque")
            {
                TipoCuenta = "Checks";
                Intereses = 0;
            }
            
            Console.WriteLine($"Informacion de cuenta de ahorro \nBalance Inicial: {BalanceInicial.ToString("C2")}\nBalance Actual: {BalanceActual.ToString("C2")}\nTipo de Cuenta: {TipoCuenta}");
            return TipoCuenta;
        }//Menu program
        //Account prestamo ahorro cheque
        public double Depositar(double deposito)
        {
            if (BalanceActual ==0)
            {
                Console.WriteLine("ERROR: No puede usar esta funcion a menos de que usted haya creado una cuenta en opcion 1.");
                goto returnInput;
            }
            Console.WriteLine("Entre cantidad adicional de deposito");
            deposito = Convert.ToDouble(Console.ReadLine());
            BalanceActual = BalanceActual + deposito;
            UltimaTransaccion = "deposito";
            Console.WriteLine($"El balance de la cuenta es {BalanceActual.ToString("C2")} y el tipo de cuenta es de {UltimaTransaccion}");
            CantididadUltimaTransaccion = depositoInicial;
            returnInput:
            return BalanceActual;
        }
        public string Retirar(double retiro)
        {
            if (BalanceActual == 0)
            {
                Console.WriteLine("ERROR: No puede usar esta funcion a menos de que usted haya creado una cuenta en opcion 1.");
                goto returnInput;
            }
        retiroInput:
            Console.WriteLine("Entre cantidad de dinero para retirar");
            retiro = Convert.ToDouble(Console.ReadLine());
            if (retiro > BalanceActual)
            {
                Console.WriteLine("NO PUEDE RETIRAR ESA CANTIDAD");
                goto retiroInput;
            }
            BalanceActual = BalanceActual - retiro;
            UltimaTransaccion = "retiro";
            CantididadUltimaTransaccion = retiro;
            
            Console.WriteLine($"El balance de la cuenta es {BalanceActual.ToString("C2")} y el tipo de cuenta es de {UltimaTransaccion}");
            returnInput:
            return "";
        }
        public double CalcularInteres(double cantidad, double interes)
        {
            if (TipoCuenta != "Savings")
            {
                Console.WriteLine("Esta funcion solamente se puede usar con cuenta de ahorro");
                goto MainMenu;
            }
            Console.WriteLine("Entre cantidad de dinero que desea calcular con intereses");
            cantidad = Convert.ToDouble(Console.ReadLine());
            interes = 0.06;
            BalanceActual = cantidad * (1 + interes);
            Console.WriteLine($"El balance de la cuenta es {BalanceActual.ToString("C2")} y el tipo de cuenta es de {UltimaTransaccion}");
            MainMenu:
            return BalanceActual;
        }
        
        public void VerBalance()
        {
            Console.WriteLine($"Numero de cuenta: {Numero}");
            Console.WriteLine($"Tipo de cuenta: {TipoCuenta}");
            Console.WriteLine($"Balance inicial fue: {BalanceInicial.ToString("C2")}");
            Console.WriteLine($"Balance actual es: {BalanceActual.ToString("C2")}");
            Console.WriteLine($"La ultima transaccion echa es de: {UltimaTransaccion.ToString()}");
            Console.WriteLine($"La cantidad de la ultima transaccion es: {CantididadUltimaTransaccion.ToString("C2")}");
        }
    }  
}

The code shows no errors; however, when the program reaches the Cheque constructor, it redirects me to the Ahorro class instead of executing the rest of the code in the Cheque constructor.

如果您初始化了它的一个实例,代码将到达检查构造函数说:

Cheque c = new Cheque();

由于 Check 继承自 Ahorro,代码将从 Ahorro 构造函数执行其后是 Cheque

https://dotnetfiddle.net/6Jy5wO

如果你想让你的Check和Ahorro有不同的实现,那么Check一定不能继承自Ahorro。相反,让它们都从父 class 继承,因为在多级继承中,派生 class 将继承基础 class 并且派生 class 也起作用作为其他 class.

的基础 class