Udostępnij za pośrednictwem


Klasy abstrakcyjne i zapieczętowane oraz członkowie klas (Przewodnik programowania w języku C#)

Słowo kluczowe abstract umożliwia tworzenie klas oraz elementów członkowskich klasy, które są niekompletne i muszą być zaimplementowane w klasie pochodnej.

Słowo kluczowe sealed pozwala zapobiegać dziedziczeniu klasy lub niektórych członków klasy, które uprzednio zostały oznaczone jako virtual.

Klasy abstrakcyjne i elementy członkowskie klas

Klasy mogą być deklarowane jako abstrakcyjne poprzez umieszczenie słowa kluczowego abstract przed definicją klasy.Na przykład:

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

Nie można tworzyć wystąpień klas abstrakcyjnych.Celem klasy abstrakcyjnej jest zapewnienie wspólnej definicji klasy podstawowej, którą może współdzielić wiele klas pochodnych.Na przykład, biblioteka klas może zdefiniować klasę abstrakcyjną, która jest używana jako parametr do wielu swoich funkcji, i wymaga, aby programiści stosujący tę bibliotekę zapewniali własną implementację klasy, tworząc klasę pochodną.

Klasy abstrakcyjne mogą również definiować metody abstrakcyjne.Można to osiągnąć przez dodanie słowa kluczowego abstract przed zwracanym typem metody.Na przykład:

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

Metody abstrakcyjne nie mają implementacji, dlatego po definicji metody następuje średnik zamiast zwykłego bloku metody.Klasy pochodne klasy abstrakcyjnej muszą implementować wszystkie metody abstrakcyjne.Gdy klasa abstrakcyjna dziedziczy metodę wirtualną z klasy bazowej, klasa abstrakcyjna może zastąpić metodę wirtualną przez metodę abstrakcyjną.Na przykład:

// 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.
    }
}

Jeśli metoda virtual jest zadeklarowana jako abstract, nadal jest wirtualna dla każdej klasy dziedziczącej z klasy abstrakcyjnej.Klasa dziedzicząca metodę abstrakcyjną nie ma dostępu do oryginalnej implementacji metody — w poprzednim przykładzie klasa DoWork w klasie F nie może wywołać klasy DoWork w klasie D.W ten sposób klasa abstrakcyjna może wymusić na klasach pochodnych dostarczanie nowych implementacji metody dla metod wirtualnych.

Zapieczętowane klasy i członkowie klas

Klasy mogą być deklarowane jako zapieczętowane poprzez umieszczenie słowa kluczowego sealed przed definicją klasy.Na przykład:

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

Klasa zapieczętowana nie może być użyta jako klasa bazowa.Z tego powodu nie może to również być klasa abstrakcyjna.Zapieczętowane klasy uniemożliwiają wyprowadzanie.Ponieważ nigdy nie mogą one być wykorzystywane jako klasa podstawowa, niektóre optymalizacje w czasie wykonywania mogą przyspieszać wywoływanie zapieczętowanych elementów członkowskich klas.

Metoda, indeksator, właściwość lub zdarzenie w klasie pochodnej, która zastępuje wirtualny element członkowski klasy podstawowej, może zadeklarować ten element jako zapieczętowany.To neguje wirtualny aspekt elementu członkowskiego dla dalszych klas pochodnych.Można to osiągnąć przez wprowadzenie słowa kluczowego sealed przed słowem kluczowym override w deklaracji członka klasy.Na przykład:

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

Zobacz też

Zadania

Porady: definiowanie właściwości abstrakcyjnych (Przewodnik programowania w języku C#)

Informacje

Klasy i struktury (Przewodnik programowania w języku C#)

Dziedziczenie (Przewodnik programowania w języku C#)

Metody (Przewodnik programowania w języku C#)

Pola (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#