Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
Dans le monde de la programmation orientée objet, le langage C# offre aux développeurs un ensemble d'outils polyvalents pour concevoir et mettre en œuvre des logiciels robustes. L'une de ces caractéristiques, qui ajoute une couche de contrôle supplémentaire à l'héritage des classes, est le concept de classe scellée. Les classes scellées offrent un moyen unique de restreindre la hiérarchie de l'héritage, en fournissant un niveau de sécurité et d'encapsulation qui peut être bénéfique dans certains scénarios. Dans cet article, nous allons nous plonger dans les subtilités des classes scellées de C#, et nous explorerons également la fonctionIronPDF Paquet NuGet deIron Software.
Sealed Class: 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 d'étendre la classe sealed. Cette restriction délibérée garantit que la classe scellée ne peut pas être utilisée comme classe de base pour une autre classe, ce qui limite la portée de la hiérarchie de l'héritage. Les classes scellées sont souvent utilisées lorsqu'un développeur souhaite contrôler et finaliser la structure d'une classe, afin d'éviter des modifications involontaires par le biais de l'héritage.
Prenons l'exemple suivant :
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal // Error: Cannot be inherited
{
}
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal // Error: Cannot be inherited
{
}
Public NotInheritable Class Animal
Public Property Species() As String
Public Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
Public Class Dog ' Error: Cannot be inherited
Inherits Animal
End Class
Contrairement aux structures qui sont implicitement scellées, la classe scellée doit être déclarée à l'aide du mot-clé sealed, comme indiqué ci-dessus. Dans cet exemple, la classe Animal est déclarée comme scellée, ce qui empêche toute autre classe d'en hériter.
Méthode scellée: En plus de sceller des classes entières, C# permet également aux développeurs de sceller des méthodes individuelles au sein d'une classe. Une méthode scellée est une méthode qu'aucune classe dérivée ne peut remplacer. Cela garantit que le comportement de la méthode reste cohérent dans toutes les sous-classes, offrant ainsi 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; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
Public Class Animal
Public Property Species() As String
Public Overridable Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
Public Class Dog
Inherits Animal
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
Le mot-clé virtual permet à la méthode d'être surchargée dans les classes dérivées, tandis que le mot-clé sealed empêche la surcharge de la méthode virtuelle de la classe de base dans toutes les sous-classes suivantes.
Classe scellée et membres de la classe : Les classes scellées peuvent également inclure des membres scellés, tels que des propriétés, des méthodes et des é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.
Prenons l'exemple suivant :
public sealed class ControlledClass
{
public sealed string ControlledProperty { get; set; }
public virtual sealed void ControlledMethod()
{
// Method implementation
}
// Sealed event
public sealed event EventHandler ControlledEvent;
// Sealed indexers, if applicable
public sealed string this [int index]
{
get { return "Value"; }
set { /* Setter implementation */ }
}
}
public sealed class ControlledClass
{
public sealed string ControlledProperty { get; set; }
public virtual sealed void ControlledMethod()
{
// Method implementation
}
// Sealed event
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
Public NotOverridable Property ControlledProperty() As String
Public Overridable NotOverridable Sub ControlledMethod()
' Method implementation
End Sub
' Sealed event
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)
End Set
End Property
End Class
Dans cet exemple, chaque aspect de la ClasseContrôlée
est scellé - la propriété, la méthode, l'événement, et même un indexeur le cas échéant. Ce niveau d'étanchéité permet d'obtenir une structure robuste et inaltérable, idéale pour les scénarios dans lesquels la conception de la classe doit rester fixe.
Sécurité du code: Les classes scellées contribuent à la sécurité du code en empêchant les accès et les modifications 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 involontaires ou d'altérations susceptibles de compromettre la stabilité et la sécurité de la base de code.
Intégrité de la conception: Dans les bases de code ou les cadres plus importants, le maintien de l'intégrité de la conception est primordial. Une classe scellée agit comme un bloc de construction fondamental avec des structures fixes, ce qui réduit les risques de modifications involontaires. Ceci est particulièrement utile dans les scénarios où une classe sert de composant central d'un système et où son comportement doit rester cohérent dans les différents modules.
Utiliser la classe scellée avec parcimonie : Bien que la classe scellée présente des avantages, elle doit être utilisée judicieusement. L'utilisation excessive de classes scellées peut conduire à un code rigide et moins facile à maintenir.
Documenter l'intention : Lorsque l'on scelle une classe ou une méthode, il est essentiel de documenter l'intention qui sous-tend cette décision. Expliquez pourquoi une classe particulière est scellée et quelles sont les considérations de conception qui ont conduit à ce choix.
Considérer l'extensibilité future : Avant de sceller une classe, il convient de se demander si des exigences futures pourraient nécessiter une extensibilité. S'il est probable qu'une classe doive être étendue, le fait de la sceller peut entraver le développement futur.
Utiliser des méthodes scellées pour la stabilité : Les méthodes scellées peuvent être utiles lorsque le comportement de base d'une méthode doit rester stable dans différentes sous-classes. Cela peut améliorer la prévisibilité du code.
IronPDF est une bibliothèque PDF C# deIron Software et est un générateur et un lecteur de PDF moderne.
IronPDF peut être installé à l'aide de la commandeNuGet Ou en utilisant le gestionnaire de paquets de Visual Studio. Voici la commande pour la console :
dotnet add package IronPdf
Ou, pour installer IronPDF à l'aide de NuGet Package Manager, recherchez "ironpdf" dans la barre de recherche de NuGet Package Manager.
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 surcharger les membres hérités et de générer des PDF.
namespace OrderBy;
public class Program
{
static void Main()
{
Console.WriteLine("Demo Sealed Class and IronPdf");
var dog = new Dog();
dog.MakeSound();
dog.Print();
}
}
// Sealed 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
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public sealed override void Print()
{
var pdfDocument = 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>";
pdfDocument.RenderHtmlAsPdf(content).SaveAs("dog.pdf");
}
}
namespace OrderBy;
public class Program
{
static void Main()
{
Console.WriteLine("Demo Sealed Class and IronPdf");
var dog = new Dog();
dog.MakeSound();
dog.Print();
}
}
// Sealed 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
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public sealed override void Print()
{
var pdfDocument = 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>";
pdfDocument.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
' Sealed 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
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
Public NotOverridable Overrides Sub Print()
Dim pdfDocument = 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>"
ignore ignore ignore ignore ignore ignore ignore ignore pdfDocument.RenderHtmlAsPdf(content).SaveAs("dog.pdf")
End Sub
End Class
End Namespace
Voici le PDF généré par IronPDF
IronPDF. Cette clé doit être placée dans appsettings.json.
"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"IronPdf.LicenseKey": "your license key"
Indiquez votre adresse électronique pour obtenir une licence d'essai.
Les classes scellées C# offrent aux développeurs un mécanisme puissant pour contrôler la hiérarchie de l'héritage et garantir que certaines classes et leurs membres ne peuvent pas être étendus ou remplacés. Bien que l'utilisation de classes scellées doive être mûrement réfléchie, elles constituent un moyen efficace d'encapsuler les fonctionnalités et d'empêcher les modifications involontaires. En comprenant le concept de classes et de méthodes scellées, les développeurs peuvent prendre des décisions éclairées sur le moment et l'endroit où appliquer cette restriction, contribuant ainsi à créer des systèmes logiciels faciles à maintenir, sûrs et prévisibles. Avec IronPDF, nous pouvons également imprimer des documents PDF.
9 produits de l'API .NET pour vos documents de bureau