1
resposta

Duvida referente ao Polimorfismo do C#

// Prezados(a), fiz exatamente o que o professor orientou na questão do método getBonificacao(), porém , não obtive sucesso, tentei sobrescrever o método , mas a alteração não é feita. O interpretador acaba puxando do método principal

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

namespace ByteBank
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Iniciando o projeto ByteBank");

            GerenciadorBonificacao gb = new GerenciadorBonificacao();

            Console.WriteLine();

            Funcionario carlos = new Funcionario();
            carlos.Nome = "Carlos Henrique";
            carlos.CPF = "496.169.818-03";
            carlos.Salario = 2000;
            gb.Registrar(carlos);

            Console.WriteLine("Nome {0}\nCPF {1}\nSalario {2}\nBonificação {3}", carlos.Nome, carlos
                .CPF, carlos.Salario, carlos.GetBonificacao());

            Console.WriteLine();


            Funcionario roberta = new Diretor();
            roberta.Nome = "Roberta";
            roberta.CPF = "566.169.818-03";
            roberta.Salario = 1000;

            gb.Registrar(roberta);




            Console.WriteLine("Nome {0}\nCPF {1}\nSalario {2}\nBonificação {3}", roberta.Nome, roberta
                .CPF, roberta.Salario, roberta.GetBonificacao());
            Console.WriteLine("Total bonificação {0}", gb.GetTotalBonigicacao());
            roberta.falar();
            Console.ReadLine();
        }
    }
}
using ByteBank.Funcionarios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByteBank
{
    class GerenciadorBonificacao
    {

        private Double _totalBonificacao;


        public void Registrar(Funcionario funcionario)
        {
            this._totalBonificacao += funcionario.GetBonificacao();

        }


        public double GetTotalBonigicacao()
        {
            return this._totalBonificacao;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


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



        public double GetBonificacao()
        {
            return Salario * 0.10;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByteBank.Funcionarios
{
    class Diretor : Funcionario
    {



        public double GetBonificacao()
        {
            return Salario;
        }
    }
}
1 resposta

Olá Luiz, como vai?

Perceba que estamos instanciando a roberta como Funcionario. Se instanciarmos como: Diretor roberta = new Diretor();, Conseguiremos utilizar o GetBonificacao(); normalmente, seguindo o que está na classe Diretor.

Classe Diretor:

class Diretor : Funcionario
    {
        public double GetBonificacao()
        {
            return Salario + Salario;
        }
    }

Program:

 static void Main(string[] args)
        {
            GerenciadorBonificacao gerenciador = new GerenciadorBonificacao();

            Diretor roberta = new Diretor();
            roberta.Nome = "Roberta";
            roberta.CPF = "566.169.818-03";
            roberta.Salario = 1000;

            Console.WriteLine("Nome {0}\nCPF {1}\nSalario {2}\nBonificação {3}", roberta.Nome, roberta.CPF, roberta.Salario, roberta.GetBonificacao());

            Console.WriteLine(gerenciador.Registrar(roberta));


            Console.ReadLine();
        }

Por mais que Registremos a roberta. O que estamos utilizando para fazer a implementação do GetBonificacao é da class Funcionario. Veja:

 public double Registrar(Funcionario funcionario)
        {
           return this._totalBonificacao += funcionario.GetBonificacao();
        }

Por isso o GetTotalBonigicacao(); utiliza o GetBonificacao(); da classe Funcionario.

Se algo não ficou claro, fique tranquilo para perguntar novamente. Iremos aprender e ter mais exemplos até o final do curso.

Abraços!