Home > database >  C# Inherited class constructor redirects to parent class
C# Inherited class constructor redirects to parent class

Time:12-06

I'm new to C#. I have read about multilevel inheritance and how it works. My program has a multilevel inheritance. The parent class is Cuenta, and classes Prestamo and Ahorro each derive from their Parent class. 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. Any idea how to get around this? Any help would be much appreciated.

The code for the Cheque class is as follows:

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();
           
        }
    }
}

The code for the Ahorro class is as follows:

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")}");
        }
    }  
}

CodePudding user response:

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.

The code will reach the cheque constructor if you initialized an instance of it say:

Cheque c = new Cheque();

Since Cheque inherits from Ahorro, the code will execute the implementation from Ahorro constructor followed by Cheque

https://dotnetfiddle.net/6Jy5wO

If you want your Cheque and Ahorro to have different implementations, then Cheque must not inherit from Ahorro. Rather, have them inherit both from a parent class because in multi-level inheritance, a derived class will inherit a base class and as well as the derived class also act as the base class to other class.

  • Related