Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer u de sealed wijzigingsfunctie toepast op een klasse, voorkomt u dat andere klassen overnemen van die klasse. In het volgende voorbeeld neemt klasse B over van klasse A, maar kan geen klasse overnemen van klasse B.
class A {}
sealed class B : A {}
U kunt de sealed modifier ook gebruiken voor een methode of eigenschap die een virtuele methode of eigenschap in een basisklasse overschrijft. Door deze methode te gebruiken, stelt u ontwikkelaars in staat om klassen af te leiden van uw klasse, terwijl ze voorkomen dat ze specifieke virtuele methoden of eigenschappen overschrijven.
De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.
De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.
Aanbeveling
Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.
In het volgende voorbeeld Z wordt overgenomen van Y maar Z kan de virtuele functie F die is gedeclareerd in X en verzegeld, Yniet overschrijven.
class X
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
// Attempting to override F causes compiler error CS0239.
// protected override void F() { Console.WriteLine("Z.F"); }
// Overriding F2 is allowed.
protected override void F2() { Console.WriteLine("Z.F2"); }
}
Wanneer u nieuwe methoden of eigenschappen in een klasse definieert, kunt u voorkomen dat klassen worden overschreven door ze niet als virtuelete declareren.
Wanneer u een virtual lid overschrijft dat is gedeclareerd in een basistype, kunt u voorkomen dat typen worden overschreven door het sealed trefwoord te gebruiken, zoals wordt weergegeven in het volgende voorbeeld:
public sealed override string ToString() => Value;
Het is een fout om de abstracte wijziging met een verzegelde klasse te gebruiken, omdat een abstracte klasse moet worden overgenomen door een klasse die een implementatie van de abstracte methoden of eigenschappen biedt.
Wanneer u de sealed wijzigingsfunctie toepast op een methode of eigenschap, gebruikt u deze altijd met onderdrukking.
Omdat structs impliciet zijn verzegeld, kunt u ze niet overnemen.
Zie Overnamevoor meer informatie.
Zie abstracte en verzegelde klassen en klasseledenvoor meer voorbeelden.
sealed class SealedClass
{
public int x;
public int y;
}
class SealedTest2
{
static void Main()
{
var sc = new SealedClass();
sc.x = 110;
sc.y = 150;
Console.WriteLine($"x = {sc.x}, y = {sc.y}");
}
}
// Output: x = 110, y = 150
In het vorige voorbeeld kunt u proberen om over te erven van de sealed class met behulp van de volgende instructie:
class MyDerivedC: SealedClass {} // Error
Het resultaat is een foutbericht:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
Als u wilt bepalen of u een klasse, methode of eigenschap wilt verzegelen, moet u over het algemeen rekening houden met de volgende twee punten:
- De potentiële voordelen die afgeleide klassen kunnen verwerven door de mogelijkheid om uw klasse aan te passen.
- Het potentieel dat klassen afleiden, kan uw klassen zodanig wijzigen dat ze niet meer correct of zoals verwacht werken.
C#-taalspecificatie
Zie de C#-taalspecificatievoor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.