Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
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 die IronPDF NuGet-Paket von Iron Software.
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
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
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
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.
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.
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.
IronPDF ist eine C# PDF-Bibliothek von Iron Software und ist ein moderner PDF-Generator und -Reader.
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.
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
Nachfolgend finden Sie die von IronPDF generierte PDF-Datei
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"
Geben Sie Ihre E-Mail-Adresse an, um eine Testlizenz zu erhalten.
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.
9 .NET API-Produkte für Ihre Bürodokumente