Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Estou com dúvida no curso de C# e Orientação a Objetos, no exercício 6 do capítulo Interfaces.

Na classe ContaPoupanca esta dando o seguinte erro:

Error 1 Inconsistent accessibility: base class 'Caixa_Eletronico.Conta' is less accessible than class 'Caixa_Eletronico.ContaPoupanca'

A minha classe esta assim:

namespace Caixa_Eletronico { public class ContaPoupanca : Conta, ITributavel { public override void Saca(double valor) { this.Saldo -= valor; }

public double CalculaTributos() { return this.Saldo * 0.02; }

} }

5 respostas

Olá Luis Henrique

A explicação para o seu problema pode ser encontrada na apostila aberta do curso de C# e orientação a objetos da caelum:

https://www.caelum.com.br/apostila-csharp-orientacao-objetos/encapsulamento-e-modificadores-de-acesso/#7-6-para-saber-mais-visibilidade-internal

Para o seu caso em particular, você precisa colocar o public na declaração da classe Conta:

public class Conta
{
   // Implementação da classe
}

Quando coloco o public na classe conta ele aparece o seguinte erro:

Error 1 Inconsistent accessibility: property type 'Caixa_Eletronico.Cliente' is less accessible than property 'Caixa_Eletronico.Conta.Titular'

Abaixo a minha classe Conta:

namespace Caixa_Eletronico { public class Conta { public int Numero { get; set; } public double Saldo { get; protected set; } public int Tipo { get; set; } public Cliente Titular { get; set; }

public abstract void Saca(double valor);

public void Deposita(double valor) {

this.Saldo += valor; }

public void Transfere(double valor, Conta destino) { this.Saca(valor); destino.Deposita(valor); } } }

Classe cliente:

namespace Caixa_Eletronico { class Cliente { public string Nome { get; set; }

public string Rg { get; set; }

public string Endereco { get; set; }

public int Idade { get; set; }

public bool EEmancipado {get; set;}

public string CPF { get; set; }

public Cliente(string nome) { this.Nome = nome; }

public bool PodeAbrirConta() { var maiorDeIdade = (this.Idade >= 18); var emancipado = (this.EEmancipado); var temCPF = !string.IsNullOrEmpty(this.CPF);

return (maiorDeIdade || emancipado) && temCPF; }

} }

Olá Luis

Dessa vez coloque o public na declaração da classe Cliente. Para garantir que esse problema de inconsistência de visibilidade está eliminado, passe por todas as classes e interfaces que você declarou e coloque o public.

Consegui arrumar este problema.

Agora tem mais esse problema abaixo:

'Caixa_Eletronico.Conta.Saca(double)' is abstract but it is contained in non-abstract class 'Caixa_Eletronico.Conta'

Classe Conta:

namespace Caixa_Eletronico { public class Conta { public int Numero { get; set; } public double Saldo { get; protected set; } public int Tipo { get; set; } public Cliente Titular { get; set; }

public abstract void Saca(double valor);

public void Deposita(double valor) {

this.Saldo += valor; }

public void Transfere(double valor, Conta destino) { this.Saca(valor); destino.Deposita(valor); } } }

solução!

Olá Luis

Lembre que não podemos ter um método abstrato dentro de uma classe não abstrata. Então coloque a palavra abstract na declaração da classe Conta:

public abstract class Conta
{
   // implementação
}