La palabra clave 'this'
Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 4 de 70.
La palabra clave this se refiere a la instancia actual de una clase. Se utiliza para acceder a los miembros de la instancia y distinguir entre parámetros y campos con el mismo nombre.
Utiliza this para distinguir entre campos y parámetros
public class Person
{
private string name;
private int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
}Sin this, el parámetro ocultaría el campo
// Esto no funcionará como se espera
public Person(string name, int age)
{
name = name; // ¡Asigna el parámetro a sí mismo!
age = age; // ¡Asigna el parámetro a sí mismo!
}Usa this con propiedades
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public Product(string name, decimal price)
{
this.Name = name;
this.Price = price;
}
public void DisplayInfo()
{
Console.WriteLine($"{this.Name}: ${this.Price}");
}
}Usa this para llamar a otro constructor en la misma clase
public class Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
public Rectangle(int width, int height)
{
this.Width = width;
this.Height = height;
}
// Constructor para cuadrados
public Rectangle(int size) : this(size, size)
{
}
}Ejemplo de uso:
Rectangle rect = new Rectangle(5, 10);
Rectangle square = new Rectangle(5); // Crea 5x5La palabra clave this siempre se refiere a la instancia del objeto actual. Es especialmente útil cuando los nombres de los parámetros coinciden con los nombres de los campos o propiedades, lo que hace que su código sea más claro y evita errores.
Desafío
IntermedioCompleta la clase Product añadiendo un constructor que utilice la palabra clave this para asignar valores de parámetros a las propiedades. También implementa el método GetDescription() utilizando this para acceder a las propiedades.
El método GetDescription() debe devolver: "{Name} costs ${Price}"
Hoja de referencia
La palabra clave this se refiere a la instancia actual de una clase y se utiliza para acceder a los miembros de la instancia.
Use this para distinguir entre campos y parámetros con el mismo nombre:
public class Person
{
private string name;
private int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
}Sin this, el parámetro oculta el campo y se asigna a sí mismo:
// Esto no funcionará como se espera
public Person(string name, int age)
{
name = name; // ¡Asigna el parámetro a sí mismo!
age = age; // ¡Asigna el parámetro a sí mismo!
}Use this con propiedades:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public Product(string name, decimal price)
{
this.Name = name;
this.Price = price;
}
public void DisplayInfo()
{
Console.WriteLine($"{this.Name}: ${this.Price}");
}
}Use this para llamar a otro constructor en la misma clase (encadenamiento de constructores):
public class Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
public Rectangle(int width, int height)
{
this.Width = width;
this.Height = height;
}
// Constructor para cuadrados
public Rectangle(int size) : this(size, size)
{
}
}
Rectangle square = new Rectangle(5); // Crea 5x5Pruébalo tú mismo
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
decimal price = decimal.Parse(Console.ReadLine());
Product product = new Product(name, price);
Console.WriteLine($"Product: {product.Name}");
Console.WriteLine($"Price: ${product.Price}");
Console.WriteLine(product.GetDescription());
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes