this (Riferimenti per C#)

La parola chiave this fa riferimento all'istanza corrente della classe e viene anche usata come modificatore del primo parametro di un metodo di estensione.

Nota

Questo articolo illustra l'uso di this con istanze della classe. Per altre informazioni sull'uso nei metodi di estensione, vedere Metodi di estensione.

Di seguito sono riportati gli usi comuni di this:

  • Per qualificare i membri nascosti da nomi simili, ad esempio:

    public class Employee
    {
        private string alias;
        private string name;
    
        public Employee(string name, string alias)
        {
            // Use this to qualify the members of the class
            // instead of the constructor parameters.
            this.name = name;
            this.alias = alias;
        }
    }
    
  • Per passare un oggetto come parametro ad altri metodi, ad esempio:

    CalcTax(this);
    
  • Per dichiarare gli indicizzatori, ad esempio:

    public int this[int param]
    {
        get { return array[param]; }
        set { array[param] = value; }
    }
    

Le funzioni del membro statico, perché esistono a livello di classe e non come parte di un oggetto, non dispongono di un puntatore this. È un errore fare riferimento a this in un metodo statico.

Esempio

In questo esempio, this viene usato per qualificare i membri della classe Employee, name e alias, che sono nascosti da nomi simili. Viene anche usato per passare un oggetto al metodo CalcTax, che appartiene a un'altra classe.

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

    // Constructor:
    public Employee(string name, string alias)
    {
        // Use this to qualify the fields, name and alias:
        this.name = name;
        this.alias = alias;
    }

    // Printing method:
    public void printEmployee()
    {
        Console.WriteLine("Name: {0}\nAlias: {1}", name, alias);
        // Passing the object to the CalcTax method by using 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()
    {
        // Create objects:
        Employee E1 = new Employee("Mingda Pan", "mpan");

        // Display results:
        E1.printEmployee();
    }
}
/*
Output:
    Name: Mingda Pan
    Alias: mpan
    Taxes: $240.00
 */

Specifiche del linguaggio C#

Per altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedi anche