this (Referencia de C#)this (C# Reference)

La palabra clave this hace referencia a la instancia actual de la clase y también se usa como modificador del primer parámetro de un método de extensión.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.

Nota

En este artículo se describe el uso de this con instancias de clase.This article discusses the use of this with class instances. Para obtener más información sobre su uso en métodos de extensión, vea Métodos de extensión.For more information about its use in extension methods, see Extension Methods.

A continuación se indican usos habituales de this:The following are common uses of this:

  • Para calificar a miembros ocultos por nombres similares, por ejemplo:To qualify members hidden by similar names, for example:

    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;
        }
    }
    
  • Para pasar un objeto como parámetro a otros métodos, por ejemplo:To pass an object as a parameter to other methods, for example:

    CalcTax(this);
    
  • Para declarar indizadores, por ejemplo:To declare indexers, for example:

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

Las funciones miembro estáticas no tienen un puntero this, debido a que existen en el nivel de clase y no como parte de un objeto.Static member functions, because they exist at the class level and not as part of an object, do not have a this pointer. Es un error hacer referencia a this en un método estático.It is an error to refer to this in a static method.

EjemploExample

En este ejemplo, se usa this para calificar los miembros de la clase Employee, name y alias, que están ocultos por nombres similares.In this example, this is used to qualify the Employee class members, name and alias, which are hidden by similar names. También se usa para pasar un objeto al método CalcTax, que pertenece a otra clase.It is also used to pass an object to the method CalcTax, which belongs to another class.

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
 */

Especificación del lenguaje C#C# language specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also