
C# Sealed Class (Comment ça fonctionne pour les développeurs)
Dans le monde de la programmation orientée objet, le langage C# fournit aux développeurs un ensemble d'outils polyvalents pour concevoir et mettre en œuvre des logiciels robustes. L'une de ces fonctionnalités qui ajoute un niveau supplémentaire de contrôle à l'héritage de classe est le concept de classe scellée. Les classes scellées offrent une manière unique de restreindre la hiérarchie d'héritage, offrant un niveau de sécurité et d'encapsulation qui peut être bénéfique dans certains scénarios. Dans cet article, nous approfondirons les subtilités des classes scellées en C# et explorerons également le package NuGet IronPDF de Iron Software.
Qu'est-ce que les Classes Scellées et les Méthodes Scellées ?
Classe Scellée : En C#, une classe scellée est une classe qui ne peut pas être héritée. En utilisant le mot-clé sealed, les développeurs peuvent empêcher d'autres classes de dériver ou de s'étendre à partir de la classe scellée. Cette restriction délibérée garantit que la classe scellée ne peut pas être utilisée comme classe de base pour toute autre classe, limitant l'étendue de la hiérarchie d'héritage. Les classes scellées sont souvent employées lorsqu'un développeur souhaite contrôler et finaliser la structure d'une classe, empêchant ainsi les modifications involontaires par héritage.
Considérez l'exemple suivant :
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
// The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited:
// public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal'
// {
// }Public NotInheritable Class Animal
Public Property Species() As String
Public Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
' The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited:
' public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal'
' {
' }Contrairement aux structures, qui sont implicitement scellées, la classe scellée doit être déclarée en utilisant le mot-clé sealed comme indiqué ci-dessus. Dans cet exemple, la classe Animal est déclarée comme scellée, ce qui rend l'héritage impossible pour toute autre classe.
Méthode Scellée : En plus de sceller des classes entières, C# permet également aux développeurs de sceller des méthodes individuelles dans une classe. Une méthode scellée est une méthode que toute classe dérivée ne peut pas remplacer. Cela garantit que le comportement de la méthode reste cohérent dans toutes les sous-classes, offrant un niveau de prévisibilité dans la logique de l'application.
Pour sceller une méthode, utilisez le modificateur sealed :
public class Animal
{
public string Species { get; set; }
// A virtual method allows derived classes to override it.
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal
{
// The sealed override prevents further overriding of this method.
public sealed override void MakeSound()
{
Console.WriteLine("Bark!");
}
}Public Class Animal
Public Property Species() As String
' A virtual method allows derived classes to override it.
Public Overridable Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
Public Class Dog
Inherits Animal
' The sealed override prevents further overriding of this method.
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Bark!")
End Sub
End ClassLe mot-clé virtual permet de substituer la méthode dans les classes dérivées, tandis que le mot-clé sealed empêche toute substitution supplémentaire de la méthode virtuelle de la classe de base dans toutes les sous-classes suivantes.
Classe Scellée et Membres de Classe : Les classes scellées peuvent également inclure des membres scellés, tels que des propriétés, méthodes et événements. Cette combinaison de classe scellée et de membres scellés garantit un haut degré de contrôle sur le comportement et la structure de la classe.
Considérez l'exemple suivant :
public sealed class ControlledClass
{
// A sealed property that prevents overriding.
public sealed string ControlledProperty { get; set; }
// A method that cannot be redefined by derived classes.
public virtual sealed void ControlledMethod()
{
// Method implementation
Console.WriteLine("Executing controlled method.");
}
// A sealed event that cannot be subscribed to or raised by derived classes.
public sealed event EventHandler ControlledEvent;
// Sealed indexers, if applicable
public sealed string this[int index]
{
get { return "Value"; }
set
{
// Setter implementation
}
}
}Public NotInheritable Class ControlledClass
' A sealed property that prevents overriding.
Public NotOverridable Property ControlledProperty() As String
' A method that cannot be redefined by derived classes.
Public Overridable NotOverridable Sub ControlledMethod()
' Method implementation
Console.WriteLine("Executing controlled method.")
End Sub
' A sealed event that cannot be subscribed to or raised by derived classes.
Public Event ControlledEvent As EventHandler
' Sealed indexers, if applicable
Default Public NotOverridable Property Item(ByVal index As Integer) As String
Get
Return "Value"
End Get
Set(ByVal value As String)
' Setter implementation
End Set
End Property
End ClassDans cet exemple, chaque aspect de ControlledClass est scellé – la propriété, la méthode, l'événement, et même un indexeur, le cas échéant. Ce niveau de scellement fournit une structure robuste et inaltérable, idéale pour les scénarios où la conception de la classe doit rester fixe.
La Raison d'Être de la Classe Scellée
Sécurité du Code : Les classes scellées contribuent à la sécurité du code en empêchant l'accès et la modification non autorisés. Lorsqu'une classe est scellée, elle sert d'entité fermée avec une interface et un comportement bien définis. Cette encapsulation minimise le risque d'effets secondaires ou de modifications involontaires qui pourraient potentiellement compromettre la stabilité et la sécurité de la base de code.
Intégrité de la Conception : Dans les grandes bases de code ou les frameworks, maintenir l'intégrité de la conception est primordial. Une classe scellée agit comme un bloc de construction fondamental avec des structures fixes, réduisant les chances de modifications involontaires. Cela est particulièrement bénéfique dans les scénarios où une classe sert de composant central d'un système, et son comportement doit rester cohérent entre les différents modules.
Bonnes Pratiques pour l'Utilisation de la Classe Scellée
- Utiliser la Classe Scellée avec Parcimonie : Bien que la classe scellée offre des avantages, elle doit être employée judicieusement. Une utilisation excessive de classes scellées peut conduire à un code rigide et moins maintenable.
- Documenter l'Intention : Lorsque vous scellez une classe ou une méthode, il est crucial de documenter l'intention derrière cette décision. Expliquez pourquoi une classe particulière est scellée et quelles considérations de conception ont conduit à ce choix.
- Considérer l'Extensibilité Future : Avant de sceller une classe, envisagez si des exigences futures pourraient nécessiter de l'extensibilité. S'il est probable qu'une classe doive être étendue, la sceller peut entraver le développement futur.
- Utiliser des Méthodes Scellées pour la Stabilité : Sceller des méthodes peut être bénéfique lorsque le comportement de base d'une méthode doit rester stable à travers différentes sous-classes. Cela peut améliorer la prévisibilité du code.
- Elle ne Peut Aussi Être Abstraite : Une classe/méthode scellée ne peut pas non plus être une classe/méthode abstraite car les classes abstraites sont conçues pour être héritées par d'autres classes tandis que les classes scellées restreignent l'héritage.
Présentation d'IronPDF

IronPDF est une bibliothèque PDF C# de Iron Software et est un générateur et lecteur PDF moderne.
Installation
IronPDF peut être installé en utilisant la console du Package Manager NuGet ou en utilisant le Package Manager de Visual Studio. Ci-dessous est la commande pour la console :
Ou, pour installer IronPDF en utilisant le gestionnaire de packages NuGet, recherchez "IronPDF" dans la barre de recherche du gestionnaire de packages NuGet.

IronPDF et les Classes Scellées
Ensemble, le mot-clé sealed et IronPDF peuvent être utilisés pour empêcher une bibliothèque de sous-classe ou une bibliothèque dérivée de remplacer les membres hérités et aussi de générer des PDFs.
namespace OrderBy
{
public class Program
{
static void Main()
{
Console.WriteLine("Demo Sealed Class and IronPdf");
var dog = new Dog();
dog.MakeSound();
dog.Print();
}
}
// Base class
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public virtual void Print()
{
Console.WriteLine("Generic animal Print");
}
}
public class Dog : Animal
{
// Sealed override ensures method cannot be overridden in further derived classes.
public sealed override void MakeSound()
{
Console.WriteLine("Bark!");
}
public sealed override void Print()
{
var pdfRenderer = new ChromePdfRenderer();
string content = @"
<!DOCTYPE html>
<html>
<body>
<h1>Hello, Dog!</h1>
<p>This is Print from Derived class.</p>
<p>Print Animal Dog</p>
<p>Print Animal Sound: Bark</p>
</body>
</html>";
pdfRenderer.RenderHtmlAsPdf(content).SaveAs("dog.pdf");
}
}
}Namespace OrderBy
Public Class Program
Shared Sub Main()
Console.WriteLine("Demo Sealed Class and IronPdf")
Dim dog As New Dog()
dog.MakeSound()
dog.Print()
End Sub
End Class
' Base class
Public Class Animal
Public Property Species As String
Public Overridable Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
Public Overridable Sub Print()
Console.WriteLine("Generic animal Print")
End Sub
End Class
Public Class Dog
Inherits Animal
' Sealed override ensures method cannot be overridden in further derived classes.
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Bark!")
End Sub
Public NotOverridable Overrides Sub Print()
Dim pdfRenderer As New ChromePdfRenderer()
Dim content As String = "
<!DOCTYPE html>
<html>
<body>
<h1>Hello, Dog!</h1>
<p>This is Print from Derived class.</p>
<p>Print Animal Dog</p>
<p>Print Animal Sound: Bark</p>
</body>
</html>"
pdfRenderer.RenderHtmlAsPdf(content).SaveAs("dog.pdf")
End Sub
End Class
End Namespace
Ci-dessous est le PDF généré par IronPDF

Licence (Essai Gratuit Disponible)
IronPDF. Cette clé doit être placée dans appsettings.json.
{
"IronPdf.LicenseKey": "your license key"
}
Fournissez votre email pour obtenir une licence d'essai.
Conclusion
Les classes scellées en C# offrent aux développeurs un mécanisme puissant pour contrôler la hiérarchie d'héritage et garantir que certaines classes et leurs membres ne peuvent pas être étendus ou surchargés. Bien que l'utilisation des classes scellées doive être soigneusement considérée, elles fournissent un moyen efficace d'encapsuler la fonctionnalité et d'éviter les modifications involontaires. En comprenant le concept de classes et méthodes scellées, les développeurs peuvent prendre des décisions éclairées sur le moment et l'endroit pour appliquer cette restriction, contribuant à créer des systèmes logiciels maintenables, sécurisés et prévisibles. Avec IronPDF, nous pouvons également imprimer des documents PDF.

Jacob Mellor est directeur de la technologie chez Iron Software et un ingénieur visionnaire pionnier de la technologie C# PDF. En tant que développeur à l'origine de la base de code centrale d'Iron Software, il a façonné l'architecture des produits de l'entreprise depuis sa création, la transformant aux côtés du PDG Cameron Rimington en une entreprise de plus de 50 personnes au service de la NASA, de Tesla et d'agences gouvernementales mondiales.
Articles connexes


