Sdílet prostřednictvím


Abstraktní a uzavřené třídy a jejich členové (Průvodce programováním v C#)

Klíčové slovo abstract umožňuje vytvářet třídy a členy tříd, kteří jsou nekompletní a které je nutné implementovat v odvozené třídě.

Klíčové slovo sealed (zapečetěno) umožňuje zabránit dědění třídy nebo členů určité třídy, které byly dříve označeny jako virtuální.

Abstraktní třídy a členové třídy

Třídy lze deklarovat jako abstraktní vložením klíčového slova abstract před definici třídy.Příklad:

public abstract class A
{
    // Class members here.
}

Nelze vytvořit instance abstraktních tříd.Účelem abstraktní třídy je stanovit společnou definici základní třídy, kterou může sdílet více odvozených tříd.Knihovna tříd může například definovat abstraktní třídu, která se používá jako parametr pro většinu jeho funkcí a vyžaduje, aby programátoři využívající tuto knihovnu poskytli vlastní implementaci třídy vytvořením odvozené třídy.

Abstraktní třídy mohou také definovat abstraktní metody.To lze provést přidáním klíčového slova abstract před návratový typ metody.Příklad:

public abstract class A
{
    public abstract void DoWork(int i);
}

Abstraktní metody nemají implementaci, takže definice metody následuje středníkem místo bloku normální metody.Odvozené třídy abstraktní třídy musí implementovat všechny abstraktní metody.Když abstraktní třída dědí ze základní třídy virtuální metody, abstraktní třída může přepsat virtuální metodu pomocí abstraktní metody.Příklad:

// compile with: /target:library 
public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

Pokud metoda virtual je deklarována jako abstract, je stále virtuální pro jakoukoli třídu, která dědí z abstraktní třídy.Třída dědící abstraktní metodu nemůže získat přístup k původní implementaci metody – v předchozím příkladu DoWork u třídy F nemůže volat DoWork u třídy D.Tímto způsobem abstraktní třída může vynutit odvozené třídy pro poskytování implementací nových metod pro virtuální metody.

Zapečetěné třídy a členové tříd

Třídy lze deklarovat jako zapečetěné vložením klíčového slova sealed před definici třídy.Příklad:

public sealed class D
{
    // Class members here.
}

Zapečetěnou třídu nelze použít jako základní třídu.Z tohoto důvodu to nemůže být také abstraktní třída.Zapečetěné třídy zabraňují odvození.Vzhledem k tomu, že nemohou být nikdy použity jako základní třída, některé optimalizace běhu mohou provést volání zapouzdřených členů mírně rychleji.

Metoda, indexer, vlastnost nebo událost odvozené třídy, které přepisují virtuálního člena základní třídy, mohou deklarovat, že člen je zapečetěn.To neguje virtuální aspekt člena pro jakékoli další odvozené třídy.To lze provést vložením klíčového slova sealed před klíčové slovo override v deklaraci třídy člena.Příklad:

public class D : C
{
    public sealed override void DoWork() { }
}

Viz také

Úkoly

Postupy: Definování abstraktních vlastností (Průvodce programováním v C#)

Referenční dokumentace

Třídy a struktury (Průvodce programováním v C#)

Dědičnost (Průvodce programováním v C#)

Metody (Průvodce programováním v C#)

Pole (Průvodce programováním v C#)

Koncepty

Průvodce programováním v C#