[英]C# - How to create constructor for inherited class where parent class only has static constructor
[英]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.