The this keyword - C# reference (original) (raw)

The this keyword refers to the current instance of the class and is also used as a modifier of the first parameter of an extension method.

Note

This article discusses the use of this with class instances. For more information about its use in extension methods, see the keyword.

The following are common uses of this:

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;  
    }  
}  
CalcTax(this);  
public int this[int param]  
{  
    get => array[param];  
    set => array[param] = value;  
}  

Static member functions, because they exist at the class level and not as part of an object, don't have a this pointer. It's an error to refer to this in a static method.

In this example, the parameters name, and alias hide fields with the same names. The this keyword qualifies those variables as Employee class members. The this keyword also specifies the object for the method CalcTax, which belongs to another class.

class Employee
{
    private string name;
    private string alias;

    // 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: {name}
        Alias: {alias}
        """);
        // Passing the object to the CalcTax method by using this:
        Console.WriteLine($"Taxes: {Tax.CalcTax(this):C}");
    }

    public decimal Salary { get; } = 3000.00m;
}

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

class Program
{
    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
 */

C# language specification

For more information, see the C# Language Specification. The language specification is the definitive source for C# syntax and usage.

See also