C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
Sealed Classes en Methods in C# Begrijpen
Deze gids legt uit hoe u het sealed keyword gebruikt om inheritance en methode overriding te beperken in C#, met praktische codevoorbeelden.
Sealed Class
In C# voorkomt het sealed keyword dat een klasse geërfd wordt. Een sealed klasse kan nooit een derived type hebben.
Voorbeeld:
using System;
namespace SealedClass {
sealed class Animal { }
// Poging om een sealed klasse te erven resulteert in compileerfout
class Dog : Animal { }
class Program {
static void Main (string [] args) {
// object van Dog klasse aanmaken
Dog d1 = new Dog();
Console.ReadLine();
}
}
}
De compiler emiteert:
error CS0509: 'Dog': cannot derive from sealed type 'Animal'
Sealed Methode
Wanneer u een virtual methode overridet, wilt u misschien voorkomen dat derived klassen verder overriden. Prefix de override declaratie met sealed om dit te bereiken.
Voorbeeld:
using System;
namespace SealedClass {
class Animal {
public virtual void MakeSound() {
Console.WriteLine("Dier Geluid");
}
}
class Dog : Animal {
// Sealed override
sealed public override void MakeSound() {
Console.WriteLine("Hond Geluid");
}
}
class Puppy : Dog {
// Poging om een sealed methode te overriden veroorzaakt compileerfout
public override void MakeSound() {
Console.WriteLine("Puppy Geluid");
}
}
class Program {
static void Main (string [] args) {
// object van Puppy klasse aanmaken
Puppy d1 = new Puppy();
Console.ReadLine();
}
}
}
Resulterende fout:
error CS0239: 'Puppy.MakeSound()': cannot override inherited member 'Dog.MakeSound()' because it is sealed
Tip: Een overridden methode sealen stopt verder overriden in een multilevel inheritance keten.
Waarom Sealed Classes Gebruiken?
- Veiligheid en Integriteit – Een sealed klasse kan niet uitgebreid worden, dus het gedrag blijft voorspelbaar en kan niet gewijzigd worden door subklassen.
- Prestaties – De runtime kan sealed types agressiever optimaliseren omdat het weet dat er geen subklassen zijn.
- Statische Utility Types – Veel libraries blootleggen static leden via sealed klassen (bijv.
Pensin System.Drawing).
Bijvoorbeeld, de Pens klasse levert pre-geconfigureerde Pen instanties voor standaard kleuren:
Pen bluePen = Pens.Blue; // vertegenwoordigt een blauwe pen
Omdat Pens sealed is, kunnen de static leden niet geoverriden of gewijzigd worden door andere types.
C Taal
- ASTM A729 Klasse A: Dubbel-Genormaliseerd & Aangelaten Staal – Belangrijkste Eigenschappen & Standaarden
- ASTM A649 Klasse 2 Genormaliseerd & Aangelaten Staal – Specificaties & Eigenschappen
- ASTM A288 Klasse 4 Afkool & Aangelaten Staal – Specificaties & Eigenschappen
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- C# Abstract Classes & Methods: Een Praktische Gids
- C# Partial Classes en Methods: Een Praktische Gids
- C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
- C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
- C# Erfelijkheid Beheersen: Herbruikbare, Onderhoudbare Code Bouwen
- C# Polymorfisme: Statische vs Dynamische Binding Uitgelegd
- Java Onder de Knie: Objects, Classes en Kern OOP Concepten