Zum Fußzeileninhalt springen
.NET HILFE

C# Abgeschlossene Klasse (Funktionsweise für Entwickler)

In der Welt der objektorientierten Programmierung bietet die C#-Sprache Entwicklern eine vielseitige Palette an Werkzeugen, um robuste Software zu entwerfen und zu implementieren. Ein solches Feature, das eine zusätzliche Kontrolle über die Klassenvererbung bietet, ist das Konzept einer versiegelten Klasse. Versiegelte Klassen bieten eine einzigartige Möglichkeit, die Vererbungshierarchie einzuschränken und so ein Maß an Sicherheit und Kapselung zu bieten, das in bestimmten Szenarien von Vorteil sein kann. In diesem Artikel werden wir die Feinheiten der C#-versiegelten Klassen ergründen und auch das IronPDF NuGet-Paket von Iron Software erkunden.

Was sind Sealed Classes und Sealed Methods?

Versiegelte Klasse: In C# ist eine versiegelte Klasse eine Klasse, die nicht vererbt werden kann. Durch die Verwendung des sealed Schlüssels können Entwickler verhindern, dass andere Klassen von der versiegelten Klasse abgeleitet oder erweitert werden. Diese bewusste Einschränkung stellt sicher, dass die versiegelte Klasse nicht als Basisklasse für eine andere Klasse verwendet werden kann, wodurch der Umfang der Vererbungshierarchie begrenzt wird. Versiegelte Klassen werden oft eingesetzt, wenn ein Entwickler die Struktur einer Klasse kontrollieren und finalisieren möchte, um unbeabsichtigte Änderungen durch Vererbung zu verhindern.

Beispiel: IronPDF rendert HTML zu einem PDF und speichert es.

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 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'
' {
' }
$vbLabelText   $csharpLabel

Im Gegensatz zu Structs, die implizit versiegelt sind, muss die versiegelte Klasse mit dem oben gezeigten sealed Schlüsselwort deklariert werden. In diesem Beispiel wird die Animal Klasse als versiegelt deklariert, sodass es für keine andere Klasse möglich ist, von ihr zu erben.

Versiegelte Methode: Neben dem Versiegeln ganzer Klassen erlaubt C# Entwicklern auch, einzelne Methoden innerhalb einer Klasse zu versiegeln. Eine versiegelte Methode ist eine Methode, die von keiner abgeleiteten Klasse überschrieben werden kann. Dies stellt sicher, dass das Verhalten der Methode über alle Unterklassen hinweg konsistent bleibt und bietet ein Maß an Vorhersehbarkeit in der Logik der Anwendung.

Um eine Methode zu versiegeln, verwenden Sie den sealed Modifikator:

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 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 Class
$vbLabelText   $csharpLabel

Das virtual Schlüsselwort ermöglicht es, die Methode in abgeleiteten Klassen zu überschreiben, während das sealed Schlüsselwort verhindert, dass die Basisklassen-virtuelle Methode in nachfolgenden Unterklassen weiter überschrieben wird.

Versiegelte Klasse und Klassenmitglieder: Versiegelte Klassen können auch versiegelte Mitglieder wie Eigenschaften, Methoden und Ereignisse enthalten. Diese Kombination aus versiegelter Klasse und versiegelten Mitgliedern sorgt für ein hohes Maß an Kontrolle über das Verhalten und die Struktur der Klasse.

Beispiel: IronPDF rendert HTML zu einem PDF und speichert es.

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 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 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, ideal für Szenarien, in denen das Design der Klasse fest bleiben soll.

Der Grundgedanke hinter 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 Entität mit einer klar definierten Schnittstelle und Verhalten. Diese Kapselung minimiert das Risiko unbeabsichtigter Nebeneffekte oder Änderungen, die möglicherweise die Stabilität und Sicherheit des Codebestands beeinträchtigen könnten.

Integrität im Design: In größeren Codebasen oder Frameworks ist die Aufrechterhaltung der Designintegrität von größter Bedeutung. Eine versiegelte Klasse fungiert als grundlegender Baustein mit festen Strukturen, wodurch die Wahrscheinlichkeit unbeabsichtigter Änderungen verringert wird. Dies ist besonders vorteilhaft in Szenarien, in denen eine Klasse als Kernkomponente eines Systems dient und ihr Verhalten in verschiedenen Modulen konsistent bleiben soll.

Best Practices für die Verwendung von Sealed Class

  1. Verwenden Sie die versiegelte Klasse sparsam: Während die versiegelte Klasse Vorteile bietet, sollten sie mit Bedacht eingesetzt werden. Die Überbeanspruchung versiegelter Klassen kann zu starrem und schwerer wartbarem Code führen.
  2. Dokumentieren Sie die Absicht: Beim Versiegeln einer Klasse oder Methode ist es wichtig, die Absicht hinter dieser Entscheidung zu dokumentieren. Erklären Sie, warum eine bestimmte Klasse versiegelt ist und welche Designüberlegungen zu dieser Wahl geführt haben.
  3. Berücksichtigen Sie zukünftige Erweiterbarkeit: Bevor Sie eine Klasse versiegeln, sollten Sie überlegen, ob zukünftige Anforderungen eine Erweiterbarkeit erforderlich machen könnten. Wenn die Wahrscheinlichkeit besteht, dass eine Klasse erweitert werden muss, kann das Versiegeln zukünftige Entwicklungen behindern.
  4. Verwenden Sie versiegelte 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. Dadurch kann die Vorhersehbarkeit des Codes verbessert werden.
  5. Es kann auch nicht abstrakt sein: Eine versiegelte Klasse/versiegelte Methoden können auch keine abstrakten Klasse/abstrakten Methoden sein, da abstrakte Klassen dazu ausgelegt sind, von anderen Klassen geerbt zu werden, während versiegelte Klassen die Vererbung einschränken.

Einführung in IronPDF

C# Sealed Class (Wie es für Entwickler funktioniert): Abbildung 1 - IronPDF-Webseite

IronPDF ist eine C# PDF-Bibliothek von Iron Software und ist ein moderner PDF-Generator und -Leser.

Installation

IronPDF kann mithilfe der Konsole des NuGet Paketmanagers oder mit dem Visual Studio-Paketmanager installiert werden. Unten ist der Befehl für die Konsole:

Install-Package IronPdf

Oder um IronPDF mithilfe des NuGet-Paketmanagers zu installieren, suchen Sie im Suchfeld des NuGet-Paketmanagers nach "IronPDF".

C# Sealed Class (Wie es für Entwickler funktioniert): Abbildung 2 - Installation der IronPDF-Bibliothek über den NuGet-Paketmanager

IronPDF und Sealed Classes

Zusammen können das sealed Schlüsselwort und IronPDF verwendet werden, um zu verhindern, dass eine Unterklassenbibliothek oder eine abgeleitete Bibliothek geerbte Mitglieder überschreibt und auch PDFs erzeugen.

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
    {
        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 = 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
$vbLabelText   $csharpLabel

C# Sealed Class (Wie es für Entwickler funktioniert): Abbildung 3 - Konsolenausgabe, zeigt Ausführungsbefehl und alle resultierenden Konsolennachrichten

Unten ist das von IronPDF generierte PDF

C# Sealed Class (Wie es für Entwickler funktioniert): Abbildung 4 - Ausgegebenes PDF, das mit dem vorherigen Codebeispiel generiert wurde

Lizenzierung (Kostenlose Testversion verfügbar)

IronPDF. Dieser Schlüssel muss in appsettings.json platziert werden.

{
    "IronPdf.LicenseKey": "your license key"
}

Geben Sie Ihre E-Mail für eine Testlizenz an.

Abschluss

C# versiegelte Klassen bieten Entwicklern einen leistungsstarken Mechanismus, um die Vererbungshierarchie zu kontrollieren und sicherzustellen, dass bestimmte Klassen und ihre Mitglieder nicht erweitert oder überschrieben werden können. Während der Einsatz versiegelter Klassen sorgfältig abgewogen werden sollte, bieten sie ein effektives Mittel zur Kapselung von Funktionalität und zur Verhinderung unbeabsichtigter Änderungen. Indem Entwickler das Konzept versiegelter Klassen und Methoden verstehen, können sie fundierte Entscheidungen darüber treffen, wann und wo diese Einschränkung angewendet werden sollte, was zur Schaffung wartbarer, sicherer und vorhersehbarer Softwaresysteme beiträgt. Zusammen mit IronPDF können wir auch PDF-Dokumente drucken.

Häufig gestellte Fragen

Wie funktioniert eine versiegelte Klasse in C#?

In C# wird eine versiegelte Klasse mit dem sealed-Schlüsselwort definiert. Dies verhindert, dass andere Klassen von ihr erben, wodurch sichergestellt wird, dass die Implementierung der Klasse unverändert bleibt.

Warum sollten Entwickler versiegelte Klassen in C# verwenden?

Versiegelte Klassen werden verwendet, um die Integrität des Codes zu wahren, indem Vererbung verhindert wird. Dies stellt sicher, dass das Verhalten der Klasse konsistent und sicher bleibt, insbesondere in größeren Systemen, in denen Designintegrität entscheidend ist.

Können versiegelte Klassen auch versiegelte Methoden haben?

Ja, versiegelte Klassen können Methoden enthalten, die selbst versiegelt sind. Dies bedeutet, dass die Methoden in abgeleiteten Klassen nicht überschrieben werden können, was die Sicherheit und Konsistenz der Funktionalität der Klasse weiter verbessert.

Welchen Vorteil hat die Verwendung von versiegelten Methoden in einer Klasse?

Versiegelte Methoden verhindern das Überschreiben durch abgeleitete Klassen, was hilft, das ursprüngliche Verhalten der Methode beizubehalten, Konsistenz zu gewährleisten und vor ungewollten Modifikationen zu schützen.

Beispiele für versiegelte Klassen?

Versiegelte Klassen sind nützlich, wenn Sie die Implementierung einer Klasse sperren möchten, um Änderungen durch Vererbung zu verhindern, z. B. in Hilfsklassen oder bei Arbeiten mit sensiblen Operationen, bei denen Stabilität erforderlich ist.

Wie stehen versiegelte Klassen in Bezug zur PDF-Erstellung in C#?

Beim Verwenden einer PDF-Bibliothek wie IronPDF können versiegelte Klassen genutzt werden, um sicherzustellen, dass PDF-Erstellungsprozesse konsistent und sicher bleiben, indem Modifikationen durch Vererbung verhindert werden.

Ist es möglich, versiegelte Klassen mit Drittanbieterbibliotheken wie IronPDF zu verwenden?

Ja, versiegelte Klassen können zusammen mit Drittanbieterbibliotheken wie IronPDF verwendet werden, um die PDF-Erstellungslogik in einer sicheren, nicht vererbbaren Klassenstruktur zu kapseln.

Wie kann ich eine C#-PDF-Bibliothek mit NuGet installieren?

Sie können eine C# PDF-Bibliothek, wie IronPDF, über den NuGet-Paket-Manager installieren, indem Sie den Befehl dotnet add package IronPdf verwenden oder im NuGet-Paket-Manager von Visual Studio nach 'ironpdf' suchen.

Welche Überlegungen gibt es zur Verwendung von versiegelten Klassen im Software-Design?

Entwickler sollten die Notwendigkeit der zukünftigen Erweiterbarkeit in Betracht ziehen und die Gründe für das Versiegeln einer Klasse dokumentieren. Die Verwendung von versiegelten Klassen kann die Sicherheit und Wartbarkeit verbessern, sollte jedoch im Einklang mit der erforderlichen Flexibilität der Anwendung stehen.

Was ist ein empfohlenes PDF-Generator für C#-Entwickler?

IronPDF ist ein empfohlener PDF-Generator für C#-Entwickler und bietet robuste PDF-Erstellung und -Manipulation als NuGet-Paket.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen