Cuvantul cheie this este folosit pentru a referi instanta curenta a clasei pentru metoda apelata. El poate accesa membri din constructor, metode de instanta sau proprietati ale obiectului.
Un scenariu in care se foloseste
/// <summary>
/// agent class
/// </summary>
class Agent
{
public string name;
public int code;
public Agent(string name, int code)
{
//expressing programmer's intent at the level of the source code.
//"this" may be inferred by compiler and not required
this.name = name;
this.code = code;
}
}
In cazul in care nu se folosim this nu vom primi eroare la compilare, nici macar un warning. Folosirea lui este utila pentru a exprima intentia programatorului si de a face diferenta intre parametrul name si campul name.
This poate fi folosit in contextul unui constructor. El poate supraincarca constructorul pentru a evita duplicarea codului.
Clasa Agent are doi construcori publici. Primul este fara parametru si il apeleaza pe al doilea, folosind this.
/// <summary>
/// class Agent
/// </summary>
class Agent
{
public int code;
public string name;
/// <summary>
/// "this" in constructor initializer
/// </summary>
public Agent() : this(-1," ")
{
}
/// <summary>
/// explicit constructor
/// </summary>
/// <param name="code"></param>
/// <param name="name"></param>
public Agent(int code, string name)
{
this.code = code;
this.name = name;
}
}
Pentru teste, instantiem clasele:
//test constructors
//-1 " "
Agent a = new Agent();
Console.WriteLine("{0} {1}", a.code, a.name);
//1 x
Agent a2 = new Agent(1,"x");
Console.WriteLine("{0} {1}", a2.code, a2.name);
Cu thisse poate transmite ca parametru un obiect.
Cream o clasa cu o metoda cu un parametru de tip Agent.
static class Printing
{
public static void GetAgent(Agent agt)
{
//
}
}
Metoda se poate apela din interiorul clasei Agent astfel:
Printing.GetAgent(this);
This nu se aplica in interiorul unei metode statice sau a unei proprietati statice.
static void ComputeWage()
{
//error
this.Code;
//error
string s = this.name;
}
This se mai foloseste la declararea unui index sau la crearea metodelor extinse.
This este un cuvant cheie in C# pe care eu il gasesc foarte util prin folosirea lui in contextul unui constructor pentru a avea cod comun intre constructori si a permite supraincarcarea acestora, prin rolul lui in construirea indecsilor si prin faptul ca ajuta la o mai buna citire a codului.