Versiegelte Klassen und Methoden in C# meistern
Versiegelte Klassen und Methoden in C# verstehen
Dieser Leitfaden erklärt, wie das sealed Schlüsselwort Vererbung und Methodenüberschreibung in C# einschränkt, mit praktischen Codebeispielen.
Versiegelte Klasse
In C# verhindert das sealed Schlüsselwort, dass eine Klasse vererbt wird. Eine versiegelte Klasse kann nie einen abgeleiteten Typ haben.
Beispiel:
using System;
namespace SealedClass {
sealed class Animal { }
// Vererbung einer versiegelten Klasse führt zu Kompilierfehler
class Dog : Animal { }
class Program {
static void Main (string [] args) {
Dog d1 = new Dog();
Console.ReadLine();
}
}
}
Der Compiler meldet:
error CS0509: 'Dog': cannot derive from sealed type 'Animal'
Versiegelte Methode
Beim Überschreiben einer virtuellen Methode möchten Sie möglicherweise weitere Überschreibungen in abgeleiteten Klassen verhindern. Präfixieren Sie die override Deklaration mit sealed, um dies zu erreichen.
Beispiel:
using System;
namespace SealedClass {
class Animal {
public virtual void MakeSound() {
Console.WriteLine("Animal Sound");
}
}
class Dog : Animal {
// Versiegelter Override
sealed public override void MakeSound() {
Console.WriteLine("Dog Sound");
}
}
class Puppy : Dog {
// Versuch, eine versiegelte Methode zu überschreiben, verursacht Kompilierfehler
public override void MakeSound() {
Console.WriteLine("Puppy Sound");
}
}
class Program {
static void Main (string [] args) {
Puppy d1 = new Puppy();
Console.ReadLine();
}
}
}
Resultierender Fehler:
error CS0239: 'Puppy.MakeSound()': cannot override inherited member 'Dog.MakeSound()' because it is sealed
Tipp: Das Versiegeln einer überschriebenen Methode stoppt weitere Überschreibungen in einer mehrstufigen Vererbungskette.
Warum versiegelte Klassen nutzen?
- Sicherheit und Integrität – Eine versiegelte Klasse kann nicht erweitert werden, sodass ihr Verhalten vorhersehbar bleibt und nicht durch Unterklassen manipuliert werden kann.
- Performance – Die Runtime kann versiegelte Typen aggressiver optimieren, da sie weiß, dass es keine Unterklassen gibt.
- Statische Utility-Typen – Viele Bibliotheken stellen statische Member über versiegelte Klassen bereit (z.B.
Pensin System.Drawing).
Zum Beispiel bietet die Pens Klasse vorkonfigurierte Pen Instanzen für Standardfarben:
Pen bluePen = Pens.Blue; // repräsentiert einen blauen Stift
Da Pens versiegelt ist, können seine statischen Member nicht von anderen Typen überschrieben oder verändert werden.
C Sprache
- C# Klassen & Objekte: Fundamente für robustes OOP
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- C# Partielle Klassen und Methoden verstehen
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
- Java meistern: Objekte, Klassen und Kern-OOP-Konzepte verstehen
- C# Vererbung: Wiederverwendbaren & wartbaren Code erstellen
- C# Polymorphie: Statische vs. Dynamische Bindung
- ASTM A729 Klasse A: Doppel-normalisierter & vergüteter Stahl – Eigenschaften & Normen
- ASTM A649 Klasse 2: Normalisierter & vergüteter Stahl – Spezifikationen & Eigenschaften