4
respostas

Dúvida sobre o comportamento da classe

Olá senhores, gostaria de saber o como a classe "Form1" consegue "enxergar" a classe "Cliente", já que na declaração da classe a mesma não está como public - "class Conta".

Obrigado pela atenção!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CaixaEletronico
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Conta contaGuilherme = new Conta();
            contaGuilherme.Numero = 1;
            contaGuilherme.Deposita(1500.0);

            Cliente clienteGuilherme = new Cliente("Guilherme");
            clienteGuilherme.idade = 18;

            contaGuilherme.Titular = clienteGuilherme;

            bool sacou = contaGuilherme.Saca(300.0);//testando idade
            if (sacou)
            {
                MessageBox.Show("Saldo da Conta do Guilherme após saque: " + contaGuilherme.Saldo);
            }
            else
            {
                MessageBox.Show("Não foi possível sacar da conta do Guilherme");
            }
        }
    }
}

namespace CaixaEletronico
{
    class Conta
    {
        public int Numero { get; set; }
        public Cliente Titular { get; set; }
        public double Saldo { get; private set; }

        public void Deposita(double valorASerDepositado)
        {
            if (valorASerDepositado > 0)
            {
                this.Saldo += valorASerDepositado;
            }
        }

        public bool Saca(double valorASerSacado)
        {
            if (valorASerSacado > this.Saldo || valorASerSacado < 0)
            {
                return false;
            }
            else
            {
                if (this.Titular.EhMaiorDeIdade())
                {
                    this.Saldo -= valorASerSacado;
                    return true;
                }
                else
                {
                    if (valorASerSacado <= 200)
                    {
                        this.Saldo -= valorASerSacado;
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
        }

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

        public double CalculaRendimentoAnual()
        {
            double saldoNaqueleMes = this.Saldo;

            for (int i = 0; i < 12; i++)
            {
                saldoNaqueleMes = saldoNaqueleMes * 1.007;
            }

            double rendimento = saldoNaqueleMes - this.Saldo;

            return rendimento;
        }
    }
}
4 respostas

Olá, Fábio.

Você está falando da classe Cliente ou do campo Conta.Titular(tipo Cliente)? Se estiver falando da classe Cliente, ela pode estar no mesmo namespace. Se estiver falando do campo Conta.Titular, este está como public no seu código =)

Bom dia Fábio! A classe Cliente não está exposta no código que você nos apresentou, mas na declaração das variáveis da classe Conta você declarou a classe Cliente como public

class Conta
    {
        public int Numero { get; set; }
        public Cliente Titular { get; set; } // <------
        public double Saldo { get; private set; }

Eric, acabei copiando a classe errada. Foi mal. Mas a pergunta caberia pra classe conta também, já que a mesma não é public, e a mesma é instanciada no form assim como a classe cliente.

Wesley você já solucionou minha dúvida, falando sobre a questão de ter o mesmo namespace.

Mas uma dúvida, então com base nisso essa declaração de classe como está abaixo por padrão é visível a outras classes quando no mesmo namespace?

class nomeClasse
{

}

Eric e Wesley valeu mesmo ajuda de vocês!

Sim, é acessível dentro do mesmo namespace.