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
我是 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