AIDE .NET

Mot-clé virtuel C# (comment il fonctionne pour les développeurs)

Publié avril 3, 2024
Partager:

En C#, l'option mot-clé virtuel est un concept essentiel de la programmation orientée objet qui facilite le polymorphisme, permettant aux développeurs de remplacer des méthodes dans des classes dérivées. Ce mot-clé, lorsqu'il est appliqué à une méthode, une propriété ou un événement de classe, indique que le comportement de l'entité peut être modifié par une classe dérivée à l'aide du mot-clé override. Dans ce tutoriel, nous apprendrons à connaître les mots-clés virtuels C# et les Bibliothèque IronPDF. Nous allons nous plonger dans son fonctionnement et le voir à l'œuvre à l'aide d'exemples concrets.

Les méthodes virtuelles en action

Utilisation de base du mot-clé virtuel

À la base, une méthode virtuelle est une méthode de la classe de base qui permet aux classes dérivées de fournir une implémentation spécifique pour les méthodes qui sont déjà définies dans la classe de base.

Le mot-clé virtual en C# indique qu'une méthode, une propriété ou un événement est virtuel, ce qui signifie qu'il peut être remplacé dans toute classe héritant de cette méthode, de cette propriété ou de cet événement. Considérons l'exemple suivant dans lequel nous définissons une classe de base Shape avec une méthode virtuelle Area :

public class Shape
{
    public virtual double Area()
    {
        return 0; // Default implementation, returns 0
    }
}
public class Shape
{
    public virtual double Area()
    {
        return 0; // Default implementation, returns 0
    }
}
Public Class Shape
	Public Overridable Function Area() As Double
		Return 0 ' Default implementation, returns 0
	End Function
End Class
VB   C#

Surcharge des méthodes virtuelles

Les classes dérivées peuvent remplacer ces méthodes virtuelles pour fournir leur propre implémentation, adaptée aux exigences spécifiques de la classe dérivée. En utilisant le mot-clé override, créons une classe Circle qui dérive de Shape et fournit sa propre version de la méthode Area :

public class Circle : Shape
{
    public double Radius { get; set; }
    public Circle(double radius)
    {
        Radius = radius;
    }
    public override double Area()
    {
        return Math.PI * Radius * Radius; // Own implementation for circle area
    }
}
public class Circle : Shape
{
    public double Radius { get; set; }
    public Circle(double radius)
    {
        Radius = radius;
    }
    public override double Area()
    {
        return Math.PI * Radius * Radius; // Own implementation for circle area
    }
}
Public Class Circle
	Inherits Shape

	Public Property Radius() As Double
	Public Sub New(ByVal radius As Double)
		Me.Radius = radius
	End Sub
	Public Overrides Function Area() As Double
		Return Math.PI * Radius * Radius ' Own implementation for circle area
	End Function
End Class
VB   C#

Dans le code ci-dessus, la classe Cercle fournit son implémentation spécifique de la méthode Area, qui calcule l'aire d'un cercle. Cela démontre la puissance des méthodes virtuelles dans le polymorphisme.

Méthodes non virtuelles

Il est important de noter que toutes les méthodes n'ont pas besoin d'être ou ne doivent pas être virtuelles. Une méthode non virtuelle est définie de telle sorte qu'elle ne peut pas être remplacée par des classes dérivées, ce qui signifie que l'implémentation initiale reste inchangée et est utilisée par toutes les classes qui en héritent. Ceci est utile lorsqu'une classe de base fournit une implémentation standard qui ne doit pas être modifiée.

Application pratique

Mettons ces concepts en pratique dans un scénario concret. Considérons le programme suivant qui utilise nos classes Shape et Circle :

public class Program
{
    public static void Main(string [] args)
    {
        Shape myShape = new Shape();
        Shape myCircle = new Circle(5);
        Console.WriteLine($"Shape area: {myShape.Area()}");
        Console.WriteLine($"Circle area: {myCircle.Area()}");
    }
}
public class Program
{
    public static void Main(string [] args)
    {
        Shape myShape = new Shape();
        Shape myCircle = new Circle(5);
        Console.WriteLine($"Shape area: {myShape.Area()}");
        Console.WriteLine($"Circle area: {myCircle.Area()}");
    }
}
Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		Dim myShape As New Shape()
		Dim myCircle As Shape = New Circle(5)
		Console.WriteLine($"Shape area: {myShape.Area()}")
		Console.WriteLine($"Circle area: {myCircle.Area()}")
	End Sub
End Class
VB   C#

L'exemple de programme ci-dessus montre le polymorphisme en action et l'essence de la fonction virtuelle. Bien que monCercle soit déclaré comme une Shape, il appelle la méthode Area surchargée de la classe Cercle, ce qui illustre le mécanisme de répartition dynamique facilité par les mots-clés virtual et override.

Mot-clé virtuel C# (comment il fonctionne pour les développeurs) : Figure 1 - Sortie de la console du code ci-dessus montrant comment myCircle appelle la méthode superposée Area

Utilisations avancées des mots-clés virtuels et de substitution

Méthodes et classes abstraites

Les méthodes abstraites vont plus loin et sont utilisées dans les classes abstraites. Une méthode abstraite est une méthode déclarée dans la classe de base sans implémentation et doit être surchargée dans les classes dérivées. Elle oblige les classes dérivées à fournir une implémentation de la méthode abstraite, ce qui garantit une interface cohérente tout en permettant un comportement personnalisé dans chaque classe dérivée.

Surcharge de méthode et surcharge de méthode

Il est également essentiel de comprendre la différence entre la surcharge et la superposition de méthodes. La surcharge des méthodes se produit au sein d'une même classe et permet à plusieurs méthodes d'avoir le même nom mais des paramètres différents. La superposition de méthodes, facilitée par les mots-clés virtual et override, permet à une classe dérivée de fournir une implémentation différente pour une méthode définie dans la classe de base.

Propriétés virtuelles et événements

Outre les méthodes, les propriétés et les événements peuvent également être virtuels. Cela permet aux classes dérivées de fournir des getters, setters et gestionnaires d'événements personnalisés, ce qui améliore encore la flexibilité des hiérarchies de classes.

IronPDF : Bibliothèque PDF .NET

IronPDF est une bibliothèque complète conçue pour les développeurs C# afin de générer, manipuler et restituer des documents PDF directement dans les applications .NET. Il offre une API intuitive qui simplifie travailler avec des fichiers PDFqui aide les développeurs à créer, modifier et convertir des PDF sans avoir à comprendre la structure complexe des documents PDF sous-jacents ou à recourir à des logiciels externes. IronPDF s'intègre de manière transparente aux fonctionnalités orientées objet du langage, y compris l'utilisation du mot-clé virtuel, afin de fournir des capacités de traitement PDF personnalisables.

L'utilisation du mot-clé virtuel avec IronPDF permet aux développeurs d'étendre la fonctionnalité des classes d'IronPDF au sein de leurs applications. En définissant des classes de base avec des méthodes virtuelles liées à la génération ou à la manipulation de PDF, les développeurs peuvent créer des classes dérivées qui remplacent ces méthodes afin d'adapter le comportement du traitement PDF à des besoins spécifiques.

Exemple : Personnalisation du rendu PDF à l'aide de méthodes virtuelles

Imaginez que vous ayez une classe de base qui utilise IronPDF pour rendre des PDF à partir de chaînes HTML. En marquant la méthode de rendu comme virtuelle, vous permettez aux classes dérivées de modifier ou d'améliorer le processus de rendu. Voici un exemple simple :

public class BasicPdfRenderer
{
    // Virtual method allowing customization in derived classes
    public virtual byte [] RenderHtmlToPdf(string htmlContent)
    {
        // Use IronPDF to render PDF from HTML
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        return pdfDocument.BinaryData;
    }
}
public class CustomPdfRenderer : BasicPdfRenderer
{
    // Overriding the base class method to implement custom rendering settings
    public override byte [] RenderHtmlToPdf(string htmlContent)
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        // Apply a prominent watermark to the PDF document
        pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>",
                                      30,
                                      IronPdf.Editing.VerticalAlignment.Middle,
                                      IronPdf.Editing.HorizontalAlignment.Center);
        // Return the binary data of the PDF document
        return pdfDocument.BinaryData;
    }
}
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // HTML content to be converted to PDF
        string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>";
        // Create an instance of CustomPdfRenderer
        CustomPdfRenderer renderer = new CustomPdfRenderer();
        // Call RenderHtmlToPdf method to generate PDF binary data
        byte [] pdfData = renderer.RenderHtmlToPdf(htmlContent);
        // Specify the file path to save the PDF
        string filePath = "f:\\CustomRenderedPdf.pdf";
        // Save the binary data to a file
        File.WriteAllBytes(filePath, pdfData);
        Console.WriteLine($"PDF generated and saved to {filePath}");
    }
}
public class BasicPdfRenderer
{
    // Virtual method allowing customization in derived classes
    public virtual byte [] RenderHtmlToPdf(string htmlContent)
    {
        // Use IronPDF to render PDF from HTML
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        return pdfDocument.BinaryData;
    }
}
public class CustomPdfRenderer : BasicPdfRenderer
{
    // Overriding the base class method to implement custom rendering settings
    public override byte [] RenderHtmlToPdf(string htmlContent)
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        // Apply a prominent watermark to the PDF document
        pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>",
                                      30,
                                      IronPdf.Editing.VerticalAlignment.Middle,
                                      IronPdf.Editing.HorizontalAlignment.Center);
        // Return the binary data of the PDF document
        return pdfDocument.BinaryData;
    }
}
class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        // HTML content to be converted to PDF
        string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>";
        // Create an instance of CustomPdfRenderer
        CustomPdfRenderer renderer = new CustomPdfRenderer();
        // Call RenderHtmlToPdf method to generate PDF binary data
        byte [] pdfData = renderer.RenderHtmlToPdf(htmlContent);
        // Specify the file path to save the PDF
        string filePath = "f:\\CustomRenderedPdf.pdf";
        // Save the binary data to a file
        File.WriteAllBytes(filePath, pdfData);
        Console.WriteLine($"PDF generated and saved to {filePath}");
    }
}
Public Class BasicPdfRenderer
	' Virtual method allowing customization in derived classes
	Public Overridable Function RenderHtmlToPdf(ByVal htmlContent As String) As Byte()
		' Use IronPDF to render PDF from HTML
		Dim renderer = New IronPdf.ChromePdfRenderer()
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
		Return pdfDocument.BinaryData
	End Function
End Class
Public Class CustomPdfRenderer
	Inherits BasicPdfRenderer

	' Overriding the base class method to implement custom rendering settings
	Public Overrides Function RenderHtmlToPdf(ByVal htmlContent As String) As Byte()
		Dim renderer = New IronPdf.ChromePdfRenderer()
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
		' Apply a prominent watermark to the PDF document
		pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
		' Return the binary data of the PDF document
		Return pdfDocument.BinaryData
	End Function
End Class
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		' HTML content to be converted to PDF
		Dim htmlContent As String = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>"
		' Create an instance of CustomPdfRenderer
		Dim renderer As New CustomPdfRenderer()
		' Call RenderHtmlToPdf method to generate PDF binary data
		Dim pdfData() As Byte = renderer.RenderHtmlToPdf(htmlContent)
		' Specify the file path to save the PDF
		Dim filePath As String = "f:\CustomRenderedPdf.pdf"
		' Save the binary data to a file
		File.WriteAllBytes(filePath, pdfData)
		Console.WriteLine($"PDF generated and saved to {filePath}")
	End Sub
End Class
VB   C#

Nous utilisons IronPDF dans une classe BasicPdfRenderer pour convertir HTML en PDF, en marquant sa méthode RenderHtmlToPdf comme virtuelle pour permettre la personnalisation. La classe CustomPdfRenderer, dérivée de BasicPdfRenderer, surcharge cette méthode non seulement pour effectuer la conversion, mais aussi pour injecter une icône rouge distincte de grande taille filigrane sur le PDF généré.

Fichier PDF de sortie

Il s'agit du fichier PDF généré par IronPDF :

Mot-clé virtuel C# (comment il fonctionne pour les développeurs) : Figure 2 - Exemple de code utilisant la méthode virtuelle RenderHtmlToPDF de CustomPdfRendered pour la conversion

Conclusion

Mot-clé virtuel C# (Comment cela fonctionne pour les développeurs) : Figure 3 - Page de licence d'IronPDF

Le mot-clé virtual en C# est une pierre angulaire de la programmation orientée objet, permettant le polymorphisme et la répartition dynamique. En permettant aux classes dérivées de fournir des implémentations spécifiques de méthodes, de propriétés et d'événements définis dans les classes de base, il permet aux développeurs de créer des structures de code flexibles et réutilisables. Grâce à des exemples pratiques et à la compréhension de la relation entre les méthodes virtuelles, les mécanismes de remplacement et les hiérarchies de classes, les développeurs peuvent utiliser efficacement ces concepts pour construire des applications robustes. En outre, ces concepts aideraient également les développeurs à utiliser IronPDF plus efficacement dans leurs applications. Vous pouvez tester IronPDF sans rien dépenser en utilisant son essai gratuit coûte $749 et plus.

< PRÉCÉDENT
Génériques C# (Comment ça marche pour les développeurs)
SUIVANT >
NativeUI C# (Comment ça marche pour les développeurs)