Passer au contenu du pied de page
.NET AIDE

C# This (Comment ça fonctionne pour les développeurs)

Il existe un mot-clé particulier en C# qui revêt une importance particulière, il s'agit du mot-clé this. Ce mot-clé fait référence à l'instance de la classe dans laquelle il est utilisé. Il peut être utilisé pour distinguer les variables de niveau de classe et les paramètres de méthode qui partagent le même nom, entre autres choses. Par exemple, si vous avez une variable d'instance et un paramètre de méthode portant le même nom, this peut vous sauver la mise !

Les bases de ce mot-clé

Dans une classe publique, comme Employee par exemple, vous pouvez avoir des variables d'instance publiques telles que id ou name. Si vous souhaitez attribuer des valeurs à ces variables d'instance à l'intérieur d'une méthode, vous risquez de vous heurter à un problème courant : que faire si les paramètres de la méthode portent le même nom que les variables d'instance ?

Voici une solution : Utilisez le mot-clé this dans la documentation C# ! Dans l'exemple suivant d'une méthode à l'intérieur de la classe publique Employee, le mot-clé this est utilisé pour faire la distinction entre les variables d'instance et les paramètres de la méthode qui partagent les mêmes noms.

public class Employee
{
    private int id;
    private string name;

    public void Display(int id, string name)
    {
        // Use `this.id` to refer to the instance variable, 
        // and `id` for the method parameter.
        this.id = id;
        this.name = name;
    }
}
public class Employee
{
    private int id;
    private string name;

    public void Display(int id, string name)
    {
        // Use `this.id` to refer to the instance variable, 
        // and `id` for the method parameter.
        this.id = id;
        this.name = name;
    }
}
Public Class Employee
	Private id As Integer
	Private name As String

	Public Sub Display(ByVal id As Integer, ByVal name As String)
		' Use `this.id` to refer to the instance variable, 
		' and `id` for the method parameter.
		Me.id = id
		Me.name = name
	End Sub
End Class
$vbLabelText   $csharpLabel

Dans ce cas, this.id fait référence à la variable d'instance et id est le paramètre de la méthode.

this Mot clé dans la surcharge des constructeurs

En tirant parti du mot-clé this, la surcharge des constructeurs devient une technique puissante au sein d'une même classe. Lorsqu'une classe, telle que la classe Student, possède plusieurs constructeurs dont les paramètres varient, le mot-clé this permet à un constructeur d'en appeler un autre, éliminant ainsi la nécessité d'un code redondant.

Prenons l'exemple suivant où this est utilisé dans un constructeur paramétré :

public class Student
{
    private string name;
    private int id;

    public Student() : this("Default", 0)
    {
        // Default constructor delegates to the parameterized constructor
        // with "Default" as the name and 0 as the id.
    }

    public Student(string name, int id)
    {
        // Assign the parameters to the instance variables
        this.name = name;
        this.id = id;
    }
}
public class Student
{
    private string name;
    private int id;

    public Student() : this("Default", 0)
    {
        // Default constructor delegates to the parameterized constructor
        // with "Default" as the name and 0 as the id.
    }

    public Student(string name, int id)
    {
        // Assign the parameters to the instance variables
        this.name = name;
        this.id = id;
    }
}
Public Class Student
	Private name As String
	Private id As Integer

	Public Sub New()
		Me.New("Default", 0)
		' Default constructor delegates to the parameterized constructor
		' with "Default" as the name and 0 as the id.
	End Sub

	Public Sub New(ByVal name As String, ByVal id As Integer)
		' Assign the parameters to the instance variables
		Me.name = name
		Me.id = id
	End Sub
End Class
$vbLabelText   $csharpLabel

Dans le constructeur sans paramètre, this("Default", 0) appelle le constructeur paramétré, en définissant Default comme nom et 0 comme ID.

Explorer this dans les méthodes d'extension

Les méthodes d'extension en C# permettent d'ajouter des méthodes à des types existants sans modifier le type d'origine. C'est ici que le mot-clé this fait quelque chose de magique. Il est utilisé dans la liste des paramètres de la méthode d'extension pour faire référence au type étendu.

Prenons l'exemple suivant d'une méthode d'extension :

public static class StringExtensions
{
    // This extension method can be called on any string instance
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}
public static class StringExtensions
{
    // This extension method can be called on any string instance
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}
Public Module StringExtensions
	' This extension method can be called on any string instance
	<System.Runtime.CompilerServices.Extension> _
	Public Function IsNullOrEmpty(ByVal str As String) As Boolean
		Return String.IsNullOrEmpty(str)
	End Function
End Module
$vbLabelText   $csharpLabel

Ici, this string str indique à C# qu'il s'agit d'une méthode d'extension pour le type string. Vous pouvez maintenant utiliser cette méthode sur n'importe quel objet de type chaîne, comme if(myString.IsNullOrEmpty()).

ce dans Indexers

Le mot-clé this peut également être utilisé pour définir les indexeurs. Un indexeur permet d'indexer les instances d'une classe comme des tableaux. Cela vous aide à accéder aux données dans les objets en utilisant une notation de type index. Dans un indexeur, this est suivi d'un index de tableau, qui est généralement int index.

Voici un exemple de base d'un indexeur :

public class Test
{
    private int[] array = new int[100];

    // Define an indexer for the class
    public int this[int index]
    {
        get { return array[index]; }
        set { array[index] = value; }
    }
}
public class Test
{
    private int[] array = new int[100];

    // Define an indexer for the class
    public int this[int index]
    {
        get { return array[index]; }
        set { array[index] = value; }
    }
}
Public Class Test
	Private array(99) As Integer

	' Define an indexer for the class
	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
$vbLabelText   $csharpLabel

Dans cette classe Test, le mot clé this définit un indexeur qui peut être utilisé pour obtenir ou définir des valeurs dans le champ d'instance array.

this et membres statiques

Une chose à noter à propos de this est qu'il ne peut pas être utilisé pour référencer des membres statiques ou des méthodes. En effet, this fait référence à l'instance actuelle, et les membres statiques appartiennent à la classe elle-même, et non à une instance de la classe.

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
$vbLabelText   $csharpLabel

N'oubliez pas que this s'applique aux instances, et non aux membres statiques ou au niveau de la classe !

this Mot-clé et propriétés

Tout comme les variables d'instance et les paramètres de méthode, le mot-clé this peut également être utilisé avec les propriétés. En C#, une propriété est un membre qui fournit un mécanisme flexible pour lire, écrire ou calculer la valeur d'un champ privé. Les propriétés peuvent être utilisées comme s'il s'agissait de membres de données publiques, mais il s'agit en fait de méthodes spéciales appelées accesseurs.

Prenons un exemple simple en utilisant this dans une propriété :

public class Employee
{
    private string name;

    public string Name
    {
        get { return this.name; }
        set { this.name = value; } // Use `this` to refer to the instance variable
    }
}
public class Employee
{
    private string name;

    public string Name
    {
        get { return this.name; }
        set { this.name = value; } // Use `this` to refer to the instance variable
    }
}
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 ' Use `this` to refer to the instance variable
	End Property
End Class
$vbLabelText   $csharpLabel

Dans la classe ci-dessus, le mot-clé this est utilisé pour faire référence à la chaîne privée name dans les accesseurs get et set de la propriété Name.

Explorer this et les délégués

Un autre endroit où this apparaît est dans les délégués. Un délégué en C# est similaire à un pointeur de fonction en C ou C++. Il s'agit d'une variable de type référence qui contient la référence à une méthode. Les méthodes déléguées, tout comme les méthodes d'extension, peuvent utiliser this pour accéder à l'instance courante.

Voici un exemple de délégué utilisant this :

public delegate void DisplayDelegate();

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    public void Display()
    {
        // `this.DisplayDetails` refers to the method instance of the current object.
        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()
    {
        // `this.DisplayDetails` refers to the method instance of the current object.
        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()
		' `this.DisplayDetails` refers to the method instance of the current object.
		Dim displayDelegate As New DisplayDelegate(AddressOf Me.DisplayDetails)
		displayDelegate()
	End Sub

	Private Sub DisplayDetails()
		Console.WriteLine("ID: " & Id & ", Name: " & Name)
	End Sub
End Class
$vbLabelText   $csharpLabel

Dans la classe étudiante, this.DisplayDetails crée une nouvelle instance du délégué qui fait référence à la méthode DisplayDetails de l'objet actuel.

Mise en œuvre du mot-clé this avec IronPDF

Plongeons-nous dans un exemple où vous pourriez utiliser le mot-clé this en conjonction avec IronPDF, une puissante bibliothèque .NET pour l'édition et la création de fichiers PDF à l'aide de HTML.

Considérons une classe nommée PDFHandler qui utilise la bibliothèque IronPDF pour effectuer diverses opérations sur les fichiers PDF :

using IronPdf;

public class PDFHandler
{
    private string path;

    public PDFHandler(string path)
    {
        this.path = path;
    }

    public void GeneratePDF(string content)
    {
        // Creating a renderer to convert HTML content to PDF
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);

        // Save the generated PDF to the path specified by the current instance
        PDF.SaveAs(this.path);
    }
}
using IronPdf;

public class PDFHandler
{
    private string path;

    public PDFHandler(string path)
    {
        this.path = path;
    }

    public void GeneratePDF(string content)
    {
        // Creating a renderer to convert HTML content to PDF
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);

        // Save the generated PDF to the path specified by the current instance
        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)
		' Creating a renderer to convert HTML content to PDF
		Dim Renderer = New IronPdf.ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf(content)

		' Save the generated PDF to the path specified by the current instance
		PDF.SaveAs(Me.path)
	End Sub
End Class
$vbLabelText   $csharpLabel

Dans cette classe PDFHandler, le mot clé this est utilisé pour faire référence au champ path de l'instance actuelle. Ce champ est utilisé pour enregistrer le PDF généré dans le chemin d'accès spécifié.

Lorsque nous créons une nouvelle instance de PDFHandler et que nous appelons la méthode GeneratePDF, le mot clé this nous permet d'utiliser le path spécifié lors de la création de l'objet :

class Program
{
    static void Main(string[] args)
    {
        // Initialize PDFHandler with a specified file path
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyword.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        // Initialize PDFHandler with a specified file path
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyword.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Initialize PDFHandler with a specified file path
		Dim pdfHandler As New PDFHandler("C:\ThisKeyword.pdf")
		pdfHandler.GeneratePDF("Hello World!")
	End Sub
End Class
$vbLabelText   $csharpLabel

Ici, this rend le code plus lisible et compréhensible, notamment lorsqu'il s'agit de bibliothèques comme IronPDF.

C# This (How It Works For Developers) Figure 1

Conclusion

À présent, vous devriez avoir une bonne compréhension du mot-clé this en C#, y compris de ses utilisations très variées, des simples variables d'instance aux contextes complexes tels que les constructeurs, les méthodes d'extension, les propriétés, les délégués, les méthodes anonymes, et même lors de l'utilisation de bibliothèques populaires telles qu'IronPDF.

N'oubliez pas qu'IronPDF offre une évaluation gratuite d'IronPDF, afin que vous puissiez mettre à l'épreuve tout ce que vous avez appris aujourd'hui. Si vous décidez de continuer, les licences commencent à partir de \$liteLicense. IronPDF peut constituer un ajout intéressant à votre boîte à outils de développement C#, en simplifiant la tâche de manipulation des fichiers PDF dans vos applications.

Questions Fréquemment Posées

Comment le mot-clé 'this' peut-il distinguer les variables de classe et les paramètres de méthode en C#?

Le mot-clé 'this' en C# est utilisé pour faire référence à l'instance de la classe actuelle, permettant aux développeurs de distinguer les variables au niveau de la classe et les paramètres de méthode qui portent le même nom. Ceci est particulièrement utile pour éviter les conflits de nom dans les méthodes.

Quelle est l'importance de 'this' dans la surcharge de constructeur?

Dans la surcharge de constructeur, 'this' permet à un constructeur d'appeler un autre constructeur au sein de la même classe. Cela aide à réduire le code redondant en réutilisant la logique de constructeur existante, assurant la cohérence et la maintenabilité.

Comment 'this' facilite-t-il l'utilisation des méthodes d'extension en C#?

Le mot-clé 'this' est utilisé dans la liste des paramètres de méthode des méthodes d'extension pour indiquer le type en cours d'extension. Cela permet aux développeurs d'ajouter de nouvelles méthodes à des types existants sans modifier leur code source, étendant ainsi leurs fonctionnalités de manière transparente.

De quelle manière 'this' est-il utilisé avec les indexeurs?

En C#, 'this' est utilisé avec des indexeurs pour définir des propriétés qui permettent d'accéder aux instances d'une classe en utilisant une notation de type tableau. Cela améliore la lisibilité et l'utilisabilité de l'accès aux données au sein des objets.

Pourquoi 'this' ne peut-il pas être utilisé avec des membres statiques en C#?

Le mot-clé 'this' fait référence aux membres d'instance d'une classe, tandis que les membres statiques appartiennent à la classe elle-même, et non à une instance particulière. Par conséquent, 'this' ne peut pas être utilisé pour référencer des membres ou méthodes statiques.

Comment le mot-clé 'this' améliore-t-il l'accès aux propriétés dans les classes C#?

Le mot-clé 'this' peut être utilisé dans les accesseurs get et set d'une propriété pour faire référence aux champs privés de l'instance de classe actuelle. Cela améliore la clarté du code en indiquant explicitement que l'opération est effectuée sur les propres champs de la classe.

Quel rôle joue 'this' dans le contexte des délégués?

Dans le contexte des délégués, 'this' permet à un délégué de référencer l'instance de méthode de l'objet actuel. Ceci est crucial pour invoquer des méthodes d'instance via des délégués, offrant flexibilité dans la gestion des événements et les rappels.

Comment 'this' peut-il améliorer la lisibilité du code lors de l'utilisation de la bibliothèque IronPDF?

Lors de l'utilisation de la bibliothèque IronPDF, 'this' peut rendre le code plus lisible en indiquant clairement les variables d'instance telles que les chemins de fichiers. Cela est particulièrement utile lors de l'exécution d'opérations telles que la génération et la sauvegarde de fichiers PDF, car cela améliore la clarté et la maintenabilité du code.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur technique chez Iron Software et un ingénieur visionnaire pionnier dans la technologie des PDF en C#. En tant que développeur original derrière la base de code principale d'Iron Software, il a façonné l'architecture du produit de l'entreprise depuis sa création, ...

Lire la suite