AYUDA .NET

C# This (Cómo funciona para los desarrolladores)

Actualizado junio 13, a. m.
Compartir:

Hay una palabra clave particular en C# que tiene especial importancia, y es la palabra clave this. Esta palabra clave se refiere a la instancia de la clase actual en la que se utiliza. Puede utilizarse para distinguir entre variables a nivel de clase y parámetros de método que comparten el mismo nombre, entre otras cosas. Por ejemplo, si tienes una variable de instancia y un parámetro de método con el mismo nombre, this puede ser un salvavidas!

Conceptos básicos de esta palabra clave

En una clase pública, como Empleado por ejemplo, puedes tener variables de instancia públicas como id o nombre. Si quieres asignar valores a estas variables de instancia dentro de un método, puedes tropezarte con un problema habitual: ¿qué ocurre si los parámetros del método tienen el mismo nombre que las variables de instancia?

He aquí una solución: Utiliza el Palabra clave `this! En el siguiente ejemplo de un método dentro de la clase pública Empleado, la palabra clave this se utiliza para distinguir entre las variables de instancia y los parámetros del método que comparten los mismos nombres.

public void Display(int id, string name)
{
    this.id = id;
    this.name = name;
}
public void Display(int id, string name)
{
    this.id = id;
    this.name = name;
}
Public Sub Display(ByVal id As Integer, ByVal name As String)
	Me.id = id
	Me.name = name
End Sub
VB   C#

En este caso, this.id se refiere a la variable de instancia, y id es el parámetro del método.

Palabra clave this en la sobrecarga de constructores

Aprovechando la palabra clave this, la sobrecarga de constructores se convierte en una poderosa técnica dentro de la misma clase. Cuando una clase, como la clase alumno, tiene múltiples constructores con parámetros variables, la palabra clave this permite que un constructor llame a otro, eliminando la necesidad de código redundante.

Considere el siguiente ejemplo donde this se utiliza en un constructor parametrizado:

public class Student
{
    private string name;
    private int id;
    public Student() : this("Default", 0)
    {
    }
    public Student(string name, int id)
    {
        this.name = name;
        this.id = id;
    }
}
public class Student
{
    private string name;
    private int id;
    public Student() : this("Default", 0)
    {
    }
    public Student(string name, int id)
    {
        this.name = name;
        this.id = id;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

En el constructor sin parámetros, this("Por defecto", 0)llama al constructor parametrizado, estableciendoDefault` como nombre e ID.

Exploración de this en los métodos de extensión

Los métodos de extensión en C# permiten añadir métodos a tipos existentes sin modificar el tipo original. Aquí es donde la palabra clave this hace algo mágico. Se utiliza en la lista de parámetros del método de extensión para referirse al tipo que se está extendiendo.

Considere el siguiente ejemplo de un método de extensión:

public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}
public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}
Public Module StringExtensions
	<System.Runtime.CompilerServices.Extension> _
	Public Function IsNullOrEmpty(ByVal str As String) As Boolean
		Return String.IsNullOrEmpty(str)
	End Function
End Module
VB   C#

Aquí, this string str indica a C# que se trata de un método de extensión para el tipo string. Ahora puedes utilizar este método en cualquier objeto de cadena, como if(miCadena.IsNullOrEmpty()).

this en Indexadores

La palabra clave this también puede utilizarse para definir indexadores. Un indexador permite indexar instancias de una clase como si fueran matrices. Esto le ayuda a acceder a los datos dentro de los objetos utilizando una notación similar a un índice. En un indexador, this va seguido de un índice de matriz, que suele ser int index.

He aquí un ejemplo básico de indexador:

public class Test
{
    private int [] array = new int [100];
    public int this [int index]
    {
        get { return array [index]; }
        set { array [index] = value; }
    }
}
public class Test
{
    private int [] array = new int [100];
    public int this [int index]
    {
        get { return array [index]; }
        set { array [index] = value; }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

En esta clase Test, la palabra clave this define un indexador que puede ser utilizado para obtener o establecer valores en el campo de instancia array.

this y miembros estáticos

Una cosa a tener en cuenta sobre this es que no se puede utilizar para hacer referencia a miembros o métodos estáticos. Esto se debe a que this se refiere a la instancia actual, y los miembros estáticos pertenecen a la propia clase, no a una instancia de la clase.

public class Program
{
    public static void Main(string [] args)
    {
        // Can't use `this` here, because 'Main' is a static method.
    }
}
public class Program
{
    public static void Main(string [] args)
    {
        // Can't use `this` here, because 'Main' is a static method.
    }
}
Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		' Can't use `this` here, because 'Main' is a static method.
	End Sub
End Class
VB   C#

Así que, recuerda, this es para instancias, no para miembros a nivel de clase o estáticos!

Palabra clave this y propiedades

Al igual que las variables de instancia y los parámetros de método, la palabra clave this también puede utilizarse con propiedades. En C#, una propiedad es un miembro que proporciona un mecanismo flexible para leer, escribir o calcular el valor de un campo privado. Las propiedades se pueden utilizar como si fueran miembros de datos públicos, pero en realidad son métodos especiales llamados accesores.

Veamos un ejemplo sencillo utilizando this en una propiedad:

public class Employee
{
    private string name;
    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }
}
public class Employee
{
    private string name;
    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

En la clase anterior, la palabra clave this se utiliza para referirse a la cadena privada name en los accesores get y set de la propiedad Name.

Exploración de this y delegados

Otro lugar donde aparece "esto" es en los delegados. Un delegado en C# es similar a un puntero de función en C o C++. Es una variable de tipo referencia que contiene la referencia a un método. Los métodos delegados, al igual que los métodos de extensión, pueden utilizar this para acceder a la instancia actual.

Este es un ejemplo de un delegado que utiliza this:

public delegate void DisplayDelegate();
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public void Display()
    {
        DisplayDelegate displayDelegate = new DisplayDelegate(this.DisplayDetails);
        displayDelegate();
    }
    private void DisplayDetails()
    {
        Console.WriteLine("ID: " + Id + ", Name: " + Name);
    }
}
public delegate void DisplayDelegate();
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public void Display()
    {
        DisplayDelegate displayDelegate = new DisplayDelegate(this.DisplayDetails);
        displayDelegate();
    }
    private void DisplayDetails()
    {
        Console.WriteLine("ID: " + Id + ", Name: " + Name);
    }
}
Public Delegate Sub DisplayDelegate()
Public Class Student
	Public Property Id() As Integer
	Public Property Name() As String
	Public Sub Display()
		Dim displayDelegate As New DisplayDelegate(AddressOf Me.DisplayDetails)
		displayDelegate()
	End Sub
	Private Sub DisplayDetails()
		Console.WriteLine("ID: " & Id & ", Name: " & Name)
	End Sub
End Class
VB   C#

En la clase estudiante, this.DisplayDetails crea una nueva instancia del delegado que hace referencia al método DisplayDetails del objeto actual.

Implementación de la palabra clave this con IronPDF

Veamos un ejemplo en el que se puede utilizar la palabra clave this junto con IronPDFuna potente biblioteca .NET para editar y crear archivos PDF con HTML.

Considere una clase llamada PDFHandler que utiliza la biblioteca IronPDF para realizar diversas operaciones en archivos PDF:

using IronPdf;
public class PDFHandler
{
    private string path;
    public PDFHandler(string path)
    {
        this.path = path;
    }
    public void GeneratePDF(string content)
    {
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);
        PDF.SaveAs(this.path);
    }
}
using IronPdf;
public class PDFHandler
{
    private string path;
    public PDFHandler(string path)
    {
        this.path = path;
    }
    public void GeneratePDF(string content)
    {
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);
        PDF.SaveAs(this.path);
    }
}
Imports IronPdf
Public Class PDFHandler
	Private path As String
	Public Sub New(ByVal path As String)
		Me.path = path
	End Sub
	Public Sub GeneratePDF(ByVal content As String)
		Dim Renderer = New IronPdf.ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf(content)
		PDF.SaveAs(Me.path)
	End Sub
End Class
VB   C#

En esta clase PDFHandler, la palabra clave this se utiliza para referirse al campo path de la instancia actual. Este campo se utiliza para guardar el PDF generado en la ruta especificada.

Cuando creamos una nueva instancia de PDFHandler y llamamos al método GeneratePDF, la palabra clave this nos permite utilizar el path especificado durante la creación del objeto:

class Program
{
    static void Main(string [] args)
    {
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyowrd.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}
class Program
{
    static void Main(string [] args)
    {
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyowrd.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfHandler As New PDFHandler("C:\ThisKeyowrd.pdf")
		pdfHandler.GeneratePDF("Hello World!")
	End Sub
End Class
VB   C#

Aquí, this hace que el código sea más legible y comprensible, especialmente cuando se trata de bibliotecas como IronPDF.

C# Esto (Cómo funciona para los desarrolladores) Figura 1

Conclusión

A estas alturas, deberías tener un buen conocimiento de la palabra clave this en C#, incluyendo su amplio rango de usos, desde simples variables de instancia a contextos complejos como constructores, métodos de extensión, propiedades, delegados, métodos anónimos, e incluso cuando se utilizan librerías populares como IronPDF.

Recuerde que IronPDF ofrece un prueba gratuitapara que puedas poner a prueba todo lo que has aprendido hoy. Si decides continuar con ella, las licencias empiezan desde sólo $749. IronPDF puede ser una valiosa adición a su conjunto de herramientas de desarrollo en C#, simplificando la tarea de manejar archivos PDF en sus aplicaciones.

< ANTERIOR
C# Nuevo (Cómo funciona para los desarrolladores)
SIGUIENTE >
Lista C# (Cómo funciona para los desarrolladores)

¿Listo para empezar? Versión: 2024.8 acaba de salir

Descarga gratuita de NuGet Descargas totales: 10,439,034 Ver licencias >