What is this and when and how to use it? [duplicate]

0

I would like to know what this does and how and when to use it.

    
asked by anonymous 22.04.2018 / 07:14

1 answer

3

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

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 necessary in most cases, as in the example above, however it is indispensable when you want to access properties and fields of a class that is hidden by another similar. 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";
    }
}

this is also useful when you want to pass an object as a 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'd like to learn more about extensive methods:

22.04.2018 / 09:25