none
Construtores C# RRS feed

  • Pergunta

  • Gostaria de saber de no construtor eu uso os atributos privados ou as propriedades. Ex:

     class ContaBanco
            {
                private string conta;
                private string agencia;
                private float saldo;

                public string Conta { get => conta; set=>conta=value;}
                public string Agencia { get => agencia; set=>conta=value;}
                public float Saldo { get => saldo;set=>conta=value; }

                public ContaBanco(string conta, string agencia)
                {
                    this.conta = conta;
                    this.agencia = agencia;
                    this.saldo = 0;
                }
            }

    Neste casou eu teria que usar o :

    this.conta=conta ou

    this.Conta = conta

    terça-feira, 15 de outubro de 2019 01:01

Respostas

  • lRafael,

       Vá no código e digite "prop" e clique duas vezes na tecla TAB (<tab><tab>) - eu prefiro "propfull". 
       Mas, por favor, leia isso:

    ================================================
    C# – Get e Set de Propriedades – Encapsulamento
    Setembro 24, 2014 by Paulo Hinkel 

    É interessante criar Métodos para Pegar e Setar valores nos atributos da Classe para proteger o Sistema. Deixar os atributos públicos faz com que a Classe tenta a perder consistência e pode vir a gerar problemas.

    Vamos supor que um programador terceirizado está consumindo a aplicação conta bancária, ele não poderia ter direito de setar a qualquer momento dentro do código um valor a um atributo. Chamando métodos para setar o valor você pode garantir uma validação mínima, gerar um log, e até ter um teste de permissão com senha para ter mais segurança.

    Utilizar Métodos para Get e Set garantem um melhor encapsulamento.

    public class Conta
    {
        private string _cliente;
        private double _valor;
     
        public Conta(string nomeCliente)
        {
            this._cliente = nomeCliente;
        }
     
        public void Sacar(double valor)
        {
            this._valor = this._valor - valor;
        }
     
        public void Depositar(double valor)
        {
            this._valor = this._valor + valor;
        }
     
        public double getValor() 
        {
            return this._valor;
        }
     
        public string getCliente()
        {
            return this._cliente;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Conta c = new Conta(&amp;quot;Paulo&amp;quot;);
            c.Depositar(200);
            c.Sacar(50);
            Console.WriteLine(&amp;quot;Valor agora: &amp;quot;+ c.getValor()+&amp;quot;, do cliente &amp;quot;+c.getCliente());
            Console.ReadLine();
        }
    }


    Dica: para facilitar a criação de campos encapsulados no Visual Studio faça o seguinte.
    Crie um campo por exemplo: 

    private string _nome;


    Clique com o botão direito sobre “_nome” vá em “Refactor” > “Encapsulate Field”, então o próprio Visual Studio vai criar o encapsulamento do campo:

    public string Nome
    {
        get { return _nome; }
        set { _nome = value; }
    }


    https://paulonoia.wordpress.com/2014/09/24/c-get-e-set-de-propriedades-encapsulamento/
    ================================================
    C# - Conceitos : Construtor (revisitado) - I

    http://www.macoratti.net/18/09/c_constr1.htm
    ================================================


    []'s,
    Fabio I.

    • Editado Fabio I quarta-feira, 16 de outubro de 2019 12:31
    • Marcado como Resposta lRafael quarta-feira, 16 de outubro de 2019 15:36
    quarta-feira, 16 de outubro de 2019 12:27

Todas as Respostas

  • Olá meu caro, 

    Neste caso de uma conta bancária, é bom você manter as propriedades desta classe isoladas e criar métodos que acessam essas propriedades e efetuem as regras de negócio, você pode fazer isso declarando suas propriedades com assessores privados adicionando uma _ como prefixo de cada nome. 
    No construtor você pode receber como parâmetro essas propriedades e seta-las ali mesmo. 

    class ContaBanco {
        private string _conta { get; private set}
        private string _agencia {get; private set}
        private float _saldo {get; private set}

        public ContaBanco(string conta, string agencia){
            _conta = conta;
            _agencia = agencia;
            _saldo.saldo = 0;
       }
      

    }



    • Sugerido como Resposta Fabio I quarta-feira, 16 de outubro de 2019 12:28
    terça-feira, 15 de outubro de 2019 01:13
  • Entao nos métodos o mais correto seria eu usar as propriedades ?
    terça-feira, 15 de outubro de 2019 13:08
  • lRafael,

       Vá no código e digite "prop" e clique duas vezes na tecla TAB (<tab><tab>) - eu prefiro "propfull". 
       Mas, por favor, leia isso:

    ================================================
    C# – Get e Set de Propriedades – Encapsulamento
    Setembro 24, 2014 by Paulo Hinkel 

    É interessante criar Métodos para Pegar e Setar valores nos atributos da Classe para proteger o Sistema. Deixar os atributos públicos faz com que a Classe tenta a perder consistência e pode vir a gerar problemas.

    Vamos supor que um programador terceirizado está consumindo a aplicação conta bancária, ele não poderia ter direito de setar a qualquer momento dentro do código um valor a um atributo. Chamando métodos para setar o valor você pode garantir uma validação mínima, gerar um log, e até ter um teste de permissão com senha para ter mais segurança.

    Utilizar Métodos para Get e Set garantem um melhor encapsulamento.

    public class Conta
    {
        private string _cliente;
        private double _valor;
     
        public Conta(string nomeCliente)
        {
            this._cliente = nomeCliente;
        }
     
        public void Sacar(double valor)
        {
            this._valor = this._valor - valor;
        }
     
        public void Depositar(double valor)
        {
            this._valor = this._valor + valor;
        }
     
        public double getValor() 
        {
            return this._valor;
        }
     
        public string getCliente()
        {
            return this._cliente;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Conta c = new Conta(&amp;quot;Paulo&amp;quot;);
            c.Depositar(200);
            c.Sacar(50);
            Console.WriteLine(&amp;quot;Valor agora: &amp;quot;+ c.getValor()+&amp;quot;, do cliente &amp;quot;+c.getCliente());
            Console.ReadLine();
        }
    }


    Dica: para facilitar a criação de campos encapsulados no Visual Studio faça o seguinte.
    Crie um campo por exemplo: 

    private string _nome;


    Clique com o botão direito sobre “_nome” vá em “Refactor” > “Encapsulate Field”, então o próprio Visual Studio vai criar o encapsulamento do campo:

    public string Nome
    {
        get { return _nome; }
        set { _nome = value; }
    }


    https://paulonoia.wordpress.com/2014/09/24/c-get-e-set-de-propriedades-encapsulamento/
    ================================================
    C# - Conceitos : Construtor (revisitado) - I

    http://www.macoratti.net/18/09/c_constr1.htm
    ================================================


    []'s,
    Fabio I.

    • Editado Fabio I quarta-feira, 16 de outubro de 2019 12:31
    • Marcado como Resposta lRafael quarta-feira, 16 de outubro de 2019 15:36
    quarta-feira, 16 de outubro de 2019 12:27