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

Dúvida no Ex. 1 da Aula 1 - Exceções

pra que serve esse base ?

5 respostas

Oi Arthur, tudo bem?

Só uma dúvida. Você está se referindo a palavra-chave base, utilizada no contexto de herança?

Abraço.

Isso mesmo

solução!

Arthur, uma das utilidades da palavra-chave base serve para você chamar um método na classe Pai que foi substituído (sobrescrito) na classe Filha. Nesse caso, você utiliza a variável base para indicar que está se referindo ao método da classe Pai, e não ao que você substituiu na Filha. Um exemplo:

class Pessoa
{
    public virtual void ola()
    {
        Console.WriteLine("Sou uma pessoa");
    }
}
class Funcionario : Pessoa
{
    public override void ola()
    {
        // base.ola() chama o método ola() em Pessoa, e não o de Funcionario
        // base.ola() faz com que imprima "Sou uma pessoa"
        base.ola(); 
        Console.WriteLine("Sou um funcionário");
    }
}
Funcionario f = new Funcionario();
f.ola();
// Saída:
// Sou uma pessoa
// Sou um funcionário

Faz sentido? Se a dúvida persistir, continuamos a conversa. :)

Então com a palavra chave base antes do método estou forçando o C# a executar o método do pai na instancia filha da classe pai? Isso anula a sobrecarga (método pai como virtual) prescrita na classe pai mesmo colocando o "override" na filha?

Oi, Samuel, tudo bem?

Não sei se eu usaria o termo anular. Mas a partir do momento que você sobrescreve o método, quando você for se referenciar aquele método, será chamado o sobrescrito da classe filha.

A palavra-chave base é uma forma de indicarmos dentro da classe filha que queremos chamar o método da classes pai. Existem alguns momentos que isso será necessário. Um deles é quando você quer executar o mesmo que o método da classe pai, mais alguma outra coisa dentro do método sobrescrito.

Foi isso que ocorreu no exemplo que dei. Com a chamada base.ola(), eu digo explicitamente que quero executar o método da classe pai. Essa chamada também é válida em construtores, quando eu quero executar um construtor da classe pai. E com variáveis de instância também.

Faz sentido? Um abraço!