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

Construtor sem parâmetros

Criei na, classe Funcionario, um outro construtor sem parâmetros e utilizei na classe Autenticavel. Funcionou. Queria saber se isso pode ser uma boa prática Ex: public Autenticavel(double salario, string cpf) : base(salario, cpf); public Autenticavel(double salario, string cpf) : base();

3 respostas

Fala, Fernando, tudo bem?

Você pode colocar aqui o código para as suas classes Funcionario e Autenticavel pra gente analisar?

No aguardo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByteBank.Funcionarios
{
    public abstract class Funcionario
    {
        public string Nome { get; set; }
        public string CPF { get; private set; }
        public double Salario { get; protected set; }


        public static int TotalDeFuncinarios { get; private set; }

        public Funcionario(double salario, string cpf)
        {
            CPF = cpf;
            Salario = salario;
            TotalDeFuncinarios++;
        }

        public Funcionario()
        {

        }

        public abstract void AumentarSalario();

        // Virtual é o método que está em todas as classes
        //Abstract é o método que está, tb em todas as classes.
        public abstract double GetBonificacao();



    }
}
using ByteBank.Sistemas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByteBank.Funcionarios
{
    public abstract class FuncionarioAutenticavel :Funcionario, IAutenticavel
    {
        public string Senha { get; set;}

        public FuncionarioAutenticavel(double salario, string cpf) : base()
        {
        }

        public bool Autenticar(string senha)
        {
            return Senha == senha;
        }

    }
}
solução!

Oi, Fernando, bom dia.

Em relação a esse construtor que você criou em FuncionarioAutenticavel:

public FuncionarioAutenticavel(double salario, string cpf): base()
{
}

Você está recebendo o salário e o CPF como argumentos de entrada e não os atribui às propriedades devidas, justamente porque optou por usar o construtor sem parâmetros de Funcionario.

Se coloque no lugar de alguém usando sua classe. Ela irá instanciar um funcionário autenticável convicta de que seu salário e CPF estarão atribuídos...

var fa = new FuncionarioAutenticavel(
    salario: 2500, 
    cpf: "111222333-44"
);

...mas quando for utilizá-los terá uma surpresa:

Console.WriteLine(fa.Salario); //imprimirá 0!
Console.WriteLine(fa.CPF); //imprimirá ""!

Então não é questão de boa prática. Ele está errado, apesar de compilar.

Espero que tenha esclarecido. Deixe aqui sua opinião.