abstract (odwołanie w C#)

abstract Modyfikator wskazuje, że rzeczą, modyfikowany ma wykonania brakujące lub niekompletne.Modyfikator abstrakcyjna służy z klas, metody, właściwości, indeksatory i zdarzeń.Użyj abstract modyfikator w deklaracji klasy, aby wskazać, że klasa jest przeznaczony tylko do być klasą bazową innych klas.Członkowie oznaczona jako abstrakcyjna lub częścią klasy abstrakcyjnej, muszą być zaimplementowane przez klasy, które dziedziczą z klasy abstrakcyjnej.

Przykład

W tym przykładzie klasy Square musi zapewniać implementację z Area , ponieważ wynika on z ShapesClass:

abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid 
    // a compile-time error. 
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

Klasy abstrakcyjne ma następujące funkcje:

  • Nie można utworzyć wystąpienia klasy abstrakcyjnej.

  • Klasa abstrakcyjna może zawierać metody abstrakcyjne i akcesorów.

  • Nie można modyfikować klasy abstrakcyjnej z sealed (odwołanie w C#) modyfikator ponieważ dwa modifers mają znaczenie przeciwległego.sealed Modyfikator uniemożliwia dziedziczone klasy i abstract modyfikator wymaga klasy ma być dziedziczony.

  • Klasa nieabstrakcyjna pochodną klasy abstrakcyjnej musi obejmować rzeczywistej implementacje wszystkich odziedziczonych metody abstrakcyjne i akcesorów.

Użyj abstract modyfikator w deklaracji metody lub właściwości, aby wskazać, że metoda lub właściwość nie zawiera implementacji.

Metody abstrakcyjne ma następujące funkcje:

  • Metoda abstrakcyjna niejawnie jest metoda wirtualna.

  • Metoda abstrakcyjna deklaracje są dozwolone jedynie w klasy abstrakcyjne.

  • Ponieważ metoda abstrakcyjna deklaracji zapewnia nie rzeczywistego wykonania, jest nie treści metody; Deklaracja metody po prostu kończy się średnikiem i nie istnieją żadne nawiasy klamrowe ({}) po podpisaniu.Na przykład:

    public abstract void MyMethod();
    

    Wdrożenia jest dostarczana przez metodę zastępującąoverride (odwołanie w C#), który jest członkiem klasy nieabstrakcyjna.

  • Jest błędem, aby użyć statyczne lub wirtualnego modyfikatorów w deklaracji metody abstrakcyjne.

Właściwości zachowują się jak metody abstrakcyjne, z wyjątkiem różnic w składni deklaracji i wywołania.

  • Jest błędem, aby użyć abstract modyfikator na właściwości statycznej.

  • Abstrakcyjne dziedziczonej właściwości może być zastąpiona w klasie pochodnej przy tym deklaracji właściwości, który używa zastąpić modyfikator.

Aby uzyskać więcej informacji na temat klasy abstrakcyjne, zobacz Klasy abstrakcyjne i zapieczętowane oraz członkowie klas (Przewodnik programowania w języku C#).

Klasa abstrakcyjna musi zapewniać implementację, dla wszystkich członków interfejsu.

Klasa abstrakcyjna, która implementuje interfejs może mapować metody interfejsu na metody typu abstract.Na przykład:

interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

W tym przykładzie klasy DerivedClass jest pochodną klasy abstrakcyjnej BaseClass.Klasa abstrakcyjna zawiera metoda abstrakcyjna, AbstractMethodoraz dwie właściwości abstrakcyjny, X i Y.

abstract class BaseClass   // Abstract class
    {
        protected int _x = 100;
        protected int _y = 150;
        public abstract void AbstractMethod();   // Abstract method 
        public abstract int X    { get; }
        public abstract int Y    { get; }
    }

    class DerivedClass : BaseClass
    {
        public override void AbstractMethod()
        {
            _x++;
            _y++;
        }

        public override int X   // overriding property
        {
            get
            {
                return _x + 10;
            }
        }

        public override int Y   // overriding property
        {
            get
            {
                return _y + 10;
            }
        }

        static void Main()
        {
            DerivedClass o = new DerivedClass();
            o.AbstractMethod();
            Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
        }
    }
    // Output: x = 111, y = 161

W poprzednim przykładzie, jeśli próba utworzenia wystąpienia klasy abstrakcyjnej przy użyciu instrukcji, jak to:

BaseClass bc = new BaseClass();   // Error

otrzymasz błąd informujący, że kompilator nie można utworzyć wystąpienia klasy abstrakcyjnej 'BaseClass'.

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też

Informacje

Modyfikatory (odwołanie w C#)

virtual (odwołanie w C#)

override (odwołanie w C#)

Słowa kluczowe języka C#

Koncepcje

Przewodnik programowania w języku C#

Inne zasoby

Odwołanie w C#