public class Conta
{
interface IEstadoDaConta
{
void Saca(Conta conta, double valor);
void Deposita(Conta conta, double valor);
}
public double Saldo { get; set; }
public double Valor { get; set; }
public DateTime DataAbertura { get; set; }
protected IEstadoDaConta EstadoAtualDaConta; // ESSA LINHA ESTÁ DANDO ERRO
IEstadoDaConta EstadoAtualDaConta; <<=== ESTÁ CORRETO DEIXAR ASSIM ????
// AQUI EU COMENTEI PARA NÃO SER USADO. TUDO CERTO ???
//public void Deposita(double valor)
//{
// Saldo += valor;
//}
class Positivo : IEstadoDaConta
{
public void Deposita(Conta conta, double valor)
{
conta.Saldo += valor * 0.98;
}
public void Saca(Conta conta, double valor)
{
conta.Saldo -= valor;
if (conta.Saldo < 0)
{
conta.EstadoAtualDaConta = new Negativo();
}
}
}
class Negativo : IEstadoDaConta
{
public void Deposita(Conta conta, double valor)
{
conta.Saldo += valor * 0.95;
if (conta.Saldo > 0)
{
conta.EstadoAtualDaConta = new Positivo();
}
}
public void Saca(Conta conta, double valor)
{
throw new Exception("Sua conta esta no vermelho. Nao e possivel sacar.");
}
}
public void Saca(double valor)
{
EstadoAtualDaConta.Saca(this, valor);
}
public void Deposita(double valor)
{
EstadoAtualDaConta.Deposita(this, valor);
}
}