using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
C# Sealed Class (Wie es für Entwickler funktioniert)
Regan Pun
18. Februar 2024
Teilen Sie:
In der Welt der objektorientierten Programmierung bietet die Sprache C# Entwicklern ein vielseitiges Instrumentarium für den Entwurf und die Implementierung robuster Software. Eine solche Funktion, die der Klassenvererbung eine zusätzliche Kontrollebene hinzufügt, ist das Konzept der versiegelten Klasse. Versiegelte Klassen bieten eine einzigartige Möglichkeit, die Vererbungshierarchie einzuschränken, und bieten ein Maß an Sicherheit und Kapselung, das in bestimmten Szenarien von Vorteil sein kann. In diesem Artikel werden wir uns mit den Feinheiten der versiegelten Klassen in C# befassen und auch dieIronPDF NuGet-Paket vonIron Software.
Was sind Sealed Classes und Sealed Methods?
Versiegelte Klasse: In C# ist eine versiegelte Klasse eine Klasse, die nicht vererbt werden kann. Mit dem Schlüsselwort sealed können Entwickler verhindern, dass andere Klassen von der versiegelten Klasse ableiten oder sie erweitern. Diese absichtliche Einschränkung stellt sicher, dass die versiegelte Klasse nicht als Basisklasse für eine andere Klasse verwendet werden kann, wodurch der Umfang der Vererbungshierarchie eingeschränkt wird. Versiegelte Klassen werden häufig verwendet, wenn ein Entwickler die Struktur einer Klasse kontrollieren und abschließen möchte, um unbeabsichtigte Änderungen durch Vererbung zu verhindern.
Betrachten Sie das folgende Beispiel:
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
$vbLabelText $csharpLabel
Im Gegensatz zu Structs, die implizit versiegelt sind, muss die versiegelte Klasse wie oben gezeigt mit dem Schlüsselwort sealed deklariert werden. In diesem Beispiel wird die Klasse Animal als versiegelt deklariert, so dass es keiner anderen Klasse möglich ist, von ihr zu erben.
Sealed Method: Neben dem Versiegeln ganzer Klassen ermöglicht C# auch das Versiegeln einzelner Methoden innerhalb einer Klasse. Eine versiegelte Methode ist eine Methode, die von keiner abgeleiteten Klasse außer Kraft gesetzt werden kann. Dadurch wird sichergestellt, dass das Verhalten der Methode über alle Unterklassen hinweg konsistent bleibt, was der Anwendungslogik ein gewisses Maß an Vorhersehbarkeit verleiht.
Um eine Methode zu versiegeln, verwenden Sie den Modifikator 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
$vbLabelText $csharpLabel
Mit dem Schlüsselwort virtual kann die Methode in abgeleiteten Klassen überschrieben werden, während das Schlüsselwort sealed verhindert, dass die virtuelle Methode der Basisklasse in nachfolgenden Unterklassen weiter überschrieben wird.
Versiegelte Klasse und Klassenmitglieder: Versiegelte Klassen können auch versiegelte Mitglieder enthalten, wie Eigenschaften, Methoden und Ereignisse. Diese Kombination aus versiegelter Klasse und versiegelten Mitgliedern gewährleistet ein hohes Maß an Kontrolle über das Verhalten und die Struktur der Klasse.
Betrachten Sie das folgende Beispiel:
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
$vbLabelText $csharpLabel
In diesem Beispiel ist jeder Aspekt der "ControlledClass" versiegelt - die Eigenschaft, die Methode, das Ereignis und sogar ein Indexer, falls zutreffend. Dieses Maß an Versiegelung bietet eine robuste und unveränderliche Struktur, die sich ideal für Szenarien eignet, in denen das Design der Klasse fest bleiben soll.
Die Begründung für Sealed Class
Codesicherheit: Versiegelte Klassen tragen zur Codesicherheit bei, indem sie unbefugten Zugriff und Änderungen verhindern. Wenn eine Klasse versiegelt ist, dient sie als geschlossene Einheit mit einer genau definierten Schnittstelle und einem genau definierten Verhalten. Diese Kapselung minimiert das Risiko unbeabsichtigter Nebeneffekte oder Änderungen, die die Stabilität und Sicherheit der Codebasis gefährden könnten.
Design-Integrität: Bei größeren Codebasen oder Frameworks ist die Wahrung der Design-Integrität von größter Bedeutung. Eine versiegelte Klasse fungiert als grundlegender Baustein mit festen Strukturen, wodurch die Gefahr unbeabsichtigter Änderungen verringert wird. Dies ist besonders in Szenarien von Vorteil, in denen eine Klasse als Kernkomponente eines Systems dient und ihr Verhalten über verschiedene Module hinweg konsistent bleiben soll.
Bewährte Praktiken für die Verwendung von Sealed Class
Verwenden Sie die versiegelte Klasse sparsam: Auch wenn die versiegelte Klasse Vorteile bietet, sollten sie mit Bedacht eingesetzt werden. Die übermäßige Verwendung von versiegelten Klassen kann zu starrem und weniger wartbarem Code führen.
Dokumentieren Sie die Absicht: Wenn eine Klasse oder Methode versiegelt wird, ist es wichtig, die Absicht hinter dieser Entscheidung zu dokumentieren. Erläutern Sie, warum eine bestimmte Klasse versiegelt ist und welche gestalterischen Überlegungen zu dieser Wahl geführt haben.
Berücksichtigen Sie die zukünftige Erweiterbarkeit: Bevor Sie eine Klasse versiegeln, überlegen Sie, ob zukünftige Anforderungen eine Erweiterbarkeit erforderlich machen könnten. Wenn die Wahrscheinlichkeit besteht, dass eine Klasse erweitert werden muss, kann das Versiegeln der Klasse die zukünftige Entwicklung behindern.
Verwendung versiegelter Methoden für Stabilität: Das Versiegeln von Methoden kann von Vorteil sein, wenn das Kernverhalten einer Methode über verschiedene Unterklassen hinweg stabil bleiben soll. Dies kann die Vorhersagbarkeit des Codes verbessern.
Es kann nicht auch abstrakt sein: Eine versiegelnde Klasse/versiegelnde Methoden kann nicht auch eine abstrakte Klasse/abstrakte Methoden sein, da abstrakte Klassen so konzipiert sind, dass sie von anderen Klassen geerbt werden können, während versiegelte Klassen die Vererbung einschränken.
Einführung in IronPDF
IronPDF ist eine C# PDF-Bibliothek vonIron Software und ist ein moderner PDF-Generator und -Reader.
Einrichtung
IronPDF kann mit dem Befehl*NuGet Paketmanager-Konsole oder über den Visual Studio-Paketmanager. Nachfolgend finden Sie den Befehl für die Konsole:
dotnet add package IronPdf
Sie können IronPDF auch über den NuGet Package Manager installieren, indem Sie in der Suchleiste des NuGet Package Managers nach "ironpdf" suchen.
IronPDF und versiegelte Klassen
Das Schlüsselwort sealed und IronPDF können zusammen verwendet werden, um zu verhindern, dass eine Unterklassenbibliothek oder eine abgeleitete Bibliothek geerbte Member überschreibt und PDFs erzeugt.
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
$vbLabelText $csharpLabel
Nachfolgend finden Sie die von IronPDF generierte PDF-Datei
Lizenzierung (kostenlose Testversion verfügbar)
IronPDF. Dieser Schlüssel muss in appsettings.json platziert werden.
"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"
$vbLabelText $csharpLabel
Geben Sie Ihre E-Mail-Adresse an, um eine Testlizenz zu erhalten.
Schlussfolgerung
C# versiegelte Klassen bieten Entwicklern einen leistungsfähigen Mechanismus, um die Vererbungshierarchie zu kontrollieren und sicherzustellen, dass bestimmte Klassen und ihre Mitglieder nicht erweitert oder überschrieben werden können. Die Verwendung von versiegelten Klassen sollte zwar sorgfältig abgewogen werden, doch bieten sie ein wirksames Mittel zur Kapselung von Funktionen und zur Verhinderung unbeabsichtigter Änderungen. Durch das Verständnis des Konzepts der versiegelten Klassen und Methoden können Entwickler fundierte Entscheidungen darüber treffen, wann und wo sie diese Einschränkung anwenden, und so zur Schaffung wartbarer, sicherer und vorhersehbarer Softwaresysteme beitragen. Zusammen mit IronPDF können wir auch PDF-Dokumente drucken.
Regan schloss sein Studium an der University of Reading mit einem BA in Elektrotechnik ab. Bevor er zu Iron Software kam, konzentrierte er sich in seinen früheren Jobs auf einzelne Aufgaben. Was ihm bei Iron Software am meisten Spaß macht, ist das Spektrum der Aufgaben, die er übernehmen kann, sei es im Vertrieb, im technischen Support, in der Produktentwicklung oder im Marketing. Es macht ihm Spaß, die Art und Weise zu verstehen, wie Entwickler die Bibliothek von Iron Software nutzen, und dieses Wissen zu nutzen, um die Dokumentation und die Produkte kontinuierlich zu verbessern.
< PREVIOUS C# Prioritäts-Warteschlange (So funktioniert es für Entwickler)
NÄCHSTES > C# LINQ Join Query Syntax (Wie es für Entwickler funktioniert)