I would like to know what this does and how and when to use it.
I would like to know what this does and how and when to use it.
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: