AYUDA .NET

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

Publicado en 13 de junio, 2023
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 elpalabra clave this en la documentación de C#! 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;
    }
}
Public Class Student
	Private name As String
	Private id As Integer

	Public Sub New()
		Me.New("Default", 0)
	End Sub

	Public Sub New(ByVal name As String, ByVal id As Integer)
		Me.name = name
		Me.id = id
	End Sub
End Class
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(myString.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; }
    }
}
Public Class Test
	Private array(99) As Integer

	Default Public Property Item(ByVal index As Integer) As Integer
		Get
			Return array (index)
		End Get
		Set(ByVal value As Integer)
			array (index) = value
		End Set
	End Property
End Class
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; }
    }
}
Public Class Employee
'INSTANT VB NOTE: The field name was renamed since Visual Basic does not allow fields to have the same name as other class members:
	Private name_Conflict As String

	Public Property Name() As String
		Get
			Return Me.name_Conflict
		End Get
		Set(ByVal value As String)
			Me.name_Conflict = value
		End Set
	End Property
End Class
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 conIronPDFuna potente biblioteca .NET para editar ycrear 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 unprueba gratuita de IronPDFpara que puedas poner a prueba todo lo que has aprendido hoy. Si decides seguir con ello, las licencias empiezan desde sólo \$liteLicense. 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.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,622,374 Ver licencias >