1
resposta

Uso do "this"

O código da classe OperacaoFinanceiraException ficou assim:

public class OperacaoFinanceiraException : Exception
{
    public OperacaoFinanceiraException()
    {

    }

    public OperacaoFinanceiraException(string mensagem)
        : base(mensagem)
    {

    }

    public OperacaoFinanceiraException(string mensagem, Exception excecaoInterna)
        : base(mensagem, excecaoInterna)
    {

    }
}

Esse código poderia ser deixado também da seguinte forma?

public class OperacaoFinanceiraException : Exception
{
    public OperacaoFinanceiraException()
    {

    }

    public OperacaoFinanceiraException(string mensagem)
        : base(mensagem)
    {

    }

    public OperacaoFinanceiraException(string mensagem, Exception excecaoInterna)
        : this(excecaoInterna)
    {

    }
}

Estou tentando entender melhor o uso do "this", por isso resolvi colocar esta dúvida aqui. Obrigado.

1 resposta

Olá Hani!

Fiz alguns testes aqui e dessa forma não funcionaria. O this neste contexto faz referência a um construtor da própria classe que recebe uma Exception como argumento. A classe Exception não recebe um argumento do mesmo tipo como parâmetro.

O que daria certo, seria você passar a string para o primeiro construtor e fazer alguma coisa com o segundo parâmetro:

public OperacaoFinanceiraException(string mensagem, Exception excecaoInterna)
    : this(mensagem)
    {
        // Aqui acontece alguma coisa com a variável excecaoInterna
    }

Como a classe Exception já tem um construtor que recebe uma string, você consegue passar esse argumento por meio do : base()

Tentei criar um construtor que passa um parâmetro para outro construtor da própria classe e também para a classe mãe, mas não tive sucesso:

class Class1
{
    public Class1(int parametro1)
    {
        this.Parametro1 = parametro1;
    }
    public int Parametro1 { get; set; }
}

class Class2 : Class1
{
    public string Parametro2 { get; set; }
    public int Parametro3 { get; set; }
    public Class2(int parametro3)
    {
        Parametro3 = parametro3;
    }

    public Class2(int parametro1, string parametro2, int parametro3) : this(parametro3) : base(parametro1) 
    {
        this.Parametro2 = parametro2;
    }
}

No fim das contas, ou você passa argumentos para a classe mãe com :base() ou para algum construtor da própria classe com : this().

Espero que tenha te ajudado entender o uso dessas duas palavras neste tipo de contexto. Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software