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

Como eu realizo o método de construtor dentro de uma classe derivada?

Eu estou batendo a cabeça para entender da maneira adequada essa questão da Herança, e estava realizando uns testes num projeto de exercícios, e eu queria realizar um construtor para uma classe "filha", mas não consigo.

Eu sou obrigado a realizar um construtor de herança em todas as classes derivadas da classe "base"? Se eu tiver 5 classes derivadas de uma classe base, em todas elas serei obrigado a realizar esses parâmetros?

namespace ByteBank
{
    public class Client : Account
    {
        public string Name { get; private set; }
        public int Age { get; private set; }
        public string CPF { get; private set; }
        public string Job { get; private set; }
       // public Address Address { get; set; }

        public Client(int Agency, int BankNumber, int Password) : base(Agency, BankNumber, Password)
        {
        }
        public Client(string Name, int Age, string CPF, string Job)
        {
            this.Name = Name;
            this.Age = Age;
            this.CPF = CPF;
            this.Job = Job;
        }
    }
}

Nesse código eu gostaria de criar um construtor para a minha classe Client, mas como eu fui obrigado a herdar o construtor da classe base, o editor de texto nem está compilando. Acho que a dúvida é boba, e espero ter sido claro.

4 respostas

Victor,

A pergunta é legal. Mas deixe eu ver se entendi direito...

Não, você pode criar um construtor da classe derivada ou herdar "base.(*) o da classe base.

(*) A palavra-chave base é usada para acessar membros de classe base de dentro de uma classe derivada:

Acho que sua dúvida está no link 2, mas recomendo ler antes o primeiro link para formar a ideia.

==========================================================

C# - Classe base, classe derivada e alguns conceitos básicos - I

https://www.macoratti.net/18/09/c_base1.htm

==========================================================

C# - Classe base, classe derivada e alguns conceitos básicos - II

Nesta classe temos também um construtor que é usado para inicializar o valor da propriedade e chamar o método GetNome().

https://www.macoratti.net/18/09/c_base2.htm

==========================================================

[]'s,

Fabio I.

No caso, então Fabio, a herança seria mais adequadamente utilizada se eu quisesse fazer uma classe que tivessem todas as propriedades do meu objeto da super classe, correto?

Se sim, como seria para digitar um construtor nessa subclasse que herdou os objetos da classe base, ou não é possível essa construção?

Dessa forma, mais ou menos:

public Client(string Name, int Age, string CPF, string Job)
        {
            this.Name = Name;
            this.Age = Age;
            this.CPF = CPF;
            this.Job = Job;
        }

        public virtual void GetInfo()
        {
            Console.WriteLine(this.Name);
            Console.WriteLine(this.Age);
            Console.WriteLine(this.CPF);
            Console.WriteLine(this.Job);
        }


        public class SeniorClient : Client
        {
            public SeniorClient(string Name, int Age, string CPF, string Job) : base(Name, Age, CPF, Job)
            {

            }

            public double paidValue { get; private set; } = 1000;
            public override void GetInfo()
            {
                base.GetInfo();
                Console.WriteLine(this.paidValue);
            }
        }

Acho que minha maior dúvida é: se eu herdo um construtor de uma classe com parâmetros, me parece que eu fico impossibilitado de criar um construtor na subclasse herdada, como essa subclasse "SeniorClient"; não é possível criar um construtor para a subclasse SeniorClient com parâmetros para que ela seja digitada no meu código Main?

solução!

Victor,

Acho que você tem razão, você pode fazer a sobrecarga do construtor, mas NÃO pode deixar de herdar tudo que venha da clase base. Eu acreditei que a assinatura método poderia ser alterado no sentido de retirar uma parte da assinatura da classe base, mas até faz sentido NÃO poder, pois com certeza alguma coisa herdada pode precisar desta parte da assinatura.

Mas criei uma sobrecarga do construtor com uma assinatura diferente adicionando um item novo chamado "bool Teste".

Veja:

using System;

namespace ByteBank
{
    public class SeniorClient : Client
    {
        // *** ERRO ***:
        //public SeniorClient()
        //{

        //}

        public SeniorClient(string Name, int Age, string CPF, string Job, bool Teste) : base(Name, Age, CPF, Job)
        {

        }

        public SeniorClient(string Name, int Age, string CPF, string Job) : base(Name, Age, CPF, Job)
        {

        }

        public double paidValue { get; private set; } = 1000;

        public override void GetInfo()
        {
            base.GetInfo();
            Console.WriteLine(this.paidValue);
        }
    }
}

Valew!

Fabio I.

Perfeito Fabio, salvou demais! Muitíssimo obrigado.