What is this and when and how to use it?

Asked

Viewed 320 times

0

I wonder what makes this and how and when to use it.

1 answer

3


The this is a keyword that references the object/instance of the current class.

public class Example
{
    private string str;

    public void Stack(int a, string b)
    {
       this.str = b;

       // Neste exemplo, você poderia oculta-la e teria o mesmo resultado:
       str = b;
    }
}

It is not needed in most cases, as in the example above, but it is indispensable when you want to access properties and fields of a class that is hidden by a similar one. For example:

public class Example
{
    private string str;

    public void Stack(int a, string b, string str)
    {
       // Aqui o uso do "this" é necessário para referenciar ao campo "str" da classe,
       // pois o parâmetro "str" está ocultando-o.
       this.str = "aaa";

       // Este trecho esta atribuindo a string "aaa" para o parâmetro do construtor
       // e não para o campo da classe, tome cuidado com isto.
       str = "aaa";
    }
}

The this is also useful when you want to pass an object as parameter to other methods:

CalcTax(this);

An example of Microsoft Docs:

class Employee
{
    private string name;
    private string alias;
    private decimal salary = 3000.00m;

    // Construtor:
    public Employee(string name, string alias)
    {
        // Usa o "this" para qualificar os campos, "name" e "alias":
        this.name = name;
        this.alias = alias;
    }

    // Método de impressão:
    public void printEmployee()
    {
        Console.WriteLine("Name: {0}\nAlias: {1}", name, alias);
        // Passando o objeto para o método "CalcTax" usando o "this":
        Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this));
    }

    public decimal Salary
    {
        get { return salary; }
    }
}

class Tax
{
    public static decimal CalcTax(Employee E)
    {
        return 0.08m * E.Salary;
    }
}

class MainClass
{
    static void Main()
    {
        // Cria os objetos:
        Employee E1 = new Employee("Mingda Pan", "mpan");

        // Exibi os resultados:
        E1.printEmployee();
    }
}
/*
Saída:
    Name: Mingda Pan
    Alias: mpan
    Taxes: $240.00
 */

It is also used in extensive methods:

public static class StringExtension
{
    public static string FirstToLower(this string str) =>
        char.ToLower(str[0]).ToString() + str.Substring(1);
}

public class Program
{   
    public static void Main()
    {
        // Exibe a string com o primeiro caractere em mínusculo.
        Console.WriteLine("Um texto qualquer...".FirstToLower());

        // Saída: um texto qualquer
    }
}

If you would like to learn more about extensive methods:

Browser other questions tagged

You are not signed in. Login or sign up in order to post.