Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když použijete sealed modifikátor na třídu, zabrání ostatním třídám dědit z této třídy. V následujícím příkladu třída B dědí z třídy A, ale žádná třída nemůže dědit z třídy B.
class A {}
sealed class B : A {}
Můžete také použít modifikátor sealed u metody nebo vlastnosti, která přepíše virtuální metodu nebo vlastnost v základní třídě. Pomocí tohoto přístupu umožníte vývojářům odvozovat třídy z vaší třídy a zároveň jim zabránit v přepsání konkrétních virtuálních metod nebo vlastností.
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
V následujícím příkladu dědí z, Z ale Z nemůže přepsat virtuální funkciF, která je deklarována X a zapečetěna v Y.Y
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"); }
}
Při definování nových metod nebo vlastností ve třídě můžete zabránit odvozeným třídám, aby je přepsaly tím, že je nedeklarujete jako virtuální.
Když přepíšete virtual člen deklarovaný v základním typu, můžete zabránit odvození typů v jeho přepsání pomocí klíčového sealed slova, jak je znázorněno v následujícím příkladu:
public sealed override string ToString() => Value;
Jedná se o chybu použití abstraktního modifikátoru s zapečetěnou třídou, protože abstraktní třída musí být zděděna třídou, která poskytuje implementaci abstraktních metod nebo vlastností.
Když modifikátor použijete sealed u metody nebo vlastnosti, vždy ho používejte s přepsání.
Vzhledem k tomu, že struktury jsou implicitně zapečetěné, nemůžete z nich dědit.
Další informace naleznete v tématu dědičnost.
Další příklady najdete v tématu abstraktní a zapečetěné třídy a členy třídy.
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
V předchozím příkladu se můžete pokusit zdědit z zapečetěné třídy pomocí následujícího příkazu:
class MyDerivedC: SealedClass {} // Error
Výsledkem je chybová zpráva:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
Chcete-li určit, zda zapečetět třídu, metodu nebo vlastnost, obecně zvažte následující dva body:
- Potenciální výhody, které odvozené třídy mohou získat díky schopnosti přizpůsobit třídu.
- Potenciál odvozených tříd by mohl vaše třídy upravit tak, aby přestaly fungovat správně nebo podle očekávání.
Specifikace jazyka C#
Další informace najdete ve specifikaci jazyka C# . Specifikace jazyka je konečným zdrojem syntaxe a použití jazyka C#.
Viz také
- Klíčová slova C#
- statické třídy a členy statické třídy
- abstraktní a zapečetěné třídy a členy třídy
- modifikátory přístupu
- modifikátory
- přepsání
- virtuální