繁体   English   中英

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

[英]C# Inherited class constructor redirects to parent class

我是 C# 的新手。 我已阅读有关多级 inheritance 及其工作原理的信息。 我的程序有一个多级 inheritance。 父 class 是 Cuenta,Prestamo 和 Ahorro 类都派生自它们的父 class。 代码显示没有错误; 但是,当程序到达 Check 构造函数时,它会将我重定向到 Ahorro class,而不是执行 Check 构造函数中代码的 rest。 知道如何解决这个问题吗? 任何帮助将非常感激。

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

Ahorro class 的代码如下:

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

代码显示没有错误; 但是,当程序到达 Check 构造函数时,它会将我重定向到 Ahorro class,而不是执行 Check 构造函数中代码的 rest。

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

Cheque c = new Cheque();

由于 Check 继承自 Ahorro,代码将执行 Ahorro 构造函数的实现,然后是 Check

https://dotnetfiddle.net/6Jy5wO

如果你希望你的 Check 和 Ahorro 有不同的实现,那么 Check 不能从 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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM