AIDE .NET

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

Il y a un mot-clé particulier en C# qui revêt une importance spéciale, et c'est le mot-clé this. Ce mot-clé fait référence à l'instance de classe courante dans laquelle il est utilisé. Il permet notamment de faire la distinction entre les variables de niveau classe et les paramètres de méthodes qui partagent le même nom. Par exemple, si vous avez une variable d'instance et un paramètre de méthode portant le même nom, this peut être un vrai sauveur !

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 se passe-t-il si les paramètres de la méthode portent le même nom que les variables d'instance ?

Voici une solution : Utilisez le this mot-clé 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 distinguer entre les variables d'instance et les paramètres de méthode qui partagent les mêmes noms.

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

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

Mot-clé this dans la surcharge de constructeurs

En utilisant le mot-clé this, la surcharge de constructeur devient une technique puissante au sein de la même classe. Lorsqu'une classe, telle qu'une classe student, possède plusieurs constructeurs avec des paramètres variés, le mot-clé this permet à un constructeur d'en appeler un autre, éliminant ainsi le besoin de code redondant.

Considérez 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)
    {
    }

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

Dans le constructeur sans paramètre, this("Default", 0) appelle le constructeur paramétré, définissant Default comme le nom et comme l'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 là 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.

Voici un exemple de méthode d'extension :

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
$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 string, comme if(myString.IsNullOrEmpty()).

this dans les indexeurs

Le mot-clé this peut également être utilisé dans la définition d'indexeurs. Un indexeur permet d'indexer les instances d'une classe comme des tableaux. Cela vous permet d'accéder aux données contenues dans les objets en utilisant une notation de type index. Dans un indexeur, this est suivi d'un indice 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];

    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
$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 concernant this est qu'il ne peut pas être utilisé pour référencer des membres ou des méthodes statiques. Cela est dû au fait que this se réfère à l'instance actuelle, et que 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

Donc, souvenez-vous, this est pour les instances, pas pour les membres de classe ou statiques !

Mot-clé this 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 données publiques, mais il s'agit en fait de méthodes spéciales appelées "accesseurs".

Examinons un simple exemple utilisant this dans une propriété :

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

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

Exploration de this et des 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 d'un 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()
    {
        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
$vbLabelText   $csharpLabel

Dans la classe étudiant, this.DisplayDetails crée une nouvelle instance du délégué qui se réfère à la méthode DisplayDetails de l'objet actuel.

Implémentation du mot-clé this avec IronPDF

Explorons un exemple où vous pourriez utiliser le mot-clé this en conjonction avec IronPDF, une librairie .NET puissante pour éditer et créer des fichiers PDF à partir de HTML.

Considérez 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)
    {
        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
$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 permet d'enregistrer le PDF généré dans le chemin d'accès spécifié.

Lorsque nous créons une nouvelle instance de PDFHandler et 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)
    {
        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
$vbLabelText   $csharpLabel

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

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

Conclusion

À présent, vous devriez avoir une bonne compréhension du mot-clé this en C#, y compris ses utilisations variées, allant des variables d'instance simples à des 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 comme IronPDF.

N'oubliez pas, IronPDF propose un essai gratuit de 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 être un ajout précieux à votre boîte à outils de développement C#, en simplifiant la tâche de manipulation des fichiers PDF dans vos applications.

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.
< PRÉCÉDENT
C# Nouveau (Comment ça marche pour les développeurs)
SUIVANT >
Liste des C# (Comment ça marche pour les développeurs)