abstract (odwołanie w C#)abstract (C# Reference)

abstract Modyfikator wskazuje, że modyfikowany element nie ma lub niekompletnej implementacji.The abstract modifier indicates that the thing being modified has a missing or incomplete implementation. Modyfikator abstrakcyjny może być używany z klasami, metodami, właściwościami, indeksatorami i zdarzeniami.The abstract modifier can be used with classes, methods, properties, indexers, and events. abstract Użyj modyfikatora w deklaracji klasy, aby wskazać, że Klasa jest przeznaczona tylko jako klasa bazowa innych klas, ale nie jest tworzona samodzielnie.Use the abstract modifier in a class declaration to indicate that a class is intended only to be a base class of other classes, not instantiated on its own. Elementy członkowskie oznaczone jako abstrakcyjne muszą być zaimplementowane przez nieabstrakcyjne klasy, które pochodzą z klasy abstrakcyjnej.Members marked as abstract must be implemented by non-abstract classes that derive from the abstract class.

PrzykładExample

W tym przykładzie Klasa Square musi dostarczyć GetArea implementację, ponieważ pochodzi ona z Shape:In this example, the class Square must provide an implementation of GetArea because it derives from Shape:

abstract class Shape
{
    public abstract int GetArea();
}

class Square : Shape
{
    int side;

    public Square(int n) => side = n;

    // GetArea method is required to avoid a compile-time error.
    public override int GetArea() => side * side;

    static void Main() 
    {
        var sq = new Square(12);
        Console.WriteLine($"Area of the square = {sq.GetArea()}");
    }
}
// Output: Area of the square = 144

Klasy abstrakcyjne mają następujące funkcje:Abstract classes have the following features:

  • Nie można utworzyć wystąpienia klasy abstrakcyjnej.An abstract class cannot be instantiated.

  • Klasa abstrakcyjna może zawierać metody abstrakcyjne i metod dostępu.An abstract class may contain abstract methods and accessors.

  • Nie można zmodyfikować klasy abstrakcyjnej za pomocą modyfikatora zapieczętowanego , ponieważ dwa Modyfikatory mają przeciwległe znaczenie.It is not possible to modify an abstract class with the sealed modifier because the two modifiers have opposite meanings. Modyfikator uniemożliwia dziedziczenie klasy abstract , a modyfikator wymaga klasy do dziedziczenia. sealedThe sealed modifier prevents a class from being inherited and the abstract modifier requires a class to be inherited.

  • Klasa nieabstrakcyjna pochodna klasy abstrakcyjnej musi zawierać rzeczywiste implementacje wszystkich dziedziczonych metod abstrakcyjnych i metody dostępu.A non-abstract class derived from an abstract class must include actual implementations of all inherited abstract methods and accessors.

abstract Użyj modyfikatora w deklaracji metody lub właściwości, aby wskazać, że metoda lub właściwość nie zawiera implementacji.Use the abstract modifier in a method or property declaration to indicate that the method or property does not contain implementation.

Metody abstrakcyjne mają następujące funkcje:Abstract methods have the following features:

  • Metoda abstrakcyjna jest niejawnie metodą wirtualną.An abstract method is implicitly a virtual method.

  • Deklaracje metody abstrakcyjnej są dozwolone tylko w klasach abstrakcyjnych.Abstract method declarations are only permitted in abstract classes.

  • Ponieważ Deklaracja metody abstrakcyjnej nie zapewnia rzeczywistej implementacji, nie istnieje treść metody; Deklaracja metody po prostu kończyć się średnikiem i nie ma nawiasów klamrowych ({}) po podpisie.Because an abstract method declaration provides no actual implementation, there is no method body; the method declaration simply ends with a semicolon and there are no curly braces ({ }) following the signature. Na przykład:For example:

    public abstract void MyMethod();  
    

    Implementacja jest dostarczana przez przesłonięcie metody, która jest elementem członkowskim klasy nieabstrakcyjnej. The implementation is provided by a method override, which is a member of a non-abstract class.

  • Wystąpił błąd podczas używania modyfikatorów static lub Virtual w deklaracji metody abstrakcyjnej.It is an error to use the static or virtual modifiers in an abstract method declaration.

Właściwości abstrakcyjne zachowują się jak metody abstrakcyjne, z wyjątkiem różnic w składni deklaracji i wywołania.Abstract properties behave like abstract methods, except for the differences in declaration and invocation syntax.

  • Wystąpił błąd podczas używania abstract modyfikatora dla właściwości statycznej.It is an error to use the abstract modifier on a static property.

  • Abstrakcyjna dziedziczona właściwość może zostać przesłonięta w klasie pochodnej przez dołączenie deklaracji właściwości, która używa modyfikatora przesłaniania.An abstract inherited property can be overridden in a derived class by including a property declaration that uses the override modifier.

Aby uzyskać więcej informacji na temat klas abstrakcyjnych, zobacz klasy abstrakcyjne i zapieczętowane oraz składowe klas.For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

Klasa abstrakcyjna musi zapewniać implementację dla wszystkich elementów członkowskich interfejsu.An abstract class must provide implementation for all interface members.

Klasa abstrakcyjna implementująca interfejs może mapować metody interfejsu na metody abstrakcyjne.An abstract class that implements an interface might map the interface methods onto abstract methods. Na przykład:For example:

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

PrzykładExample

W tym przykładzie Klasa DerivedClass pochodzi od klasy BaseClassabstrakcyjnej.In this example, the class DerivedClass is derived from an abstract class BaseClass. Klasa abstrakcyjna zawiera metodę AbstractMethodabstrakcyjną, i dwie X właściwości abstrakcyjne oraz Y.The abstract class contains an abstract method, AbstractMethod, and two abstract properties, X and 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()
    {
        var o = new DerivedClass();
        o.AbstractMethod();
        Console.WriteLine($"x = {o.X}, y = {o.Y}");
    }
}
// Output: x = 111, y = 161

W poprzednim przykładzie, jeśli spróbujesz utworzyć wystąpienie klasy abstrakcyjnej przy użyciu instrukcji podobnej do:In the preceding example, if you attempt to instantiate the abstract class by using a statement like this:

BaseClass bc = new BaseClass();   // Error  

Zostanie wyświetlony komunikat o błędzie informujący, że kompilator nie może utworzyć wystąpienia klasy abstrakcyjnej "BaseClass".You will get an error saying that the compiler cannot create an instance of the abstract class 'BaseClass'.

Specyfikacja języka C#C# Language Specification

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#.For more information, see the C# Language Specification. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.The language specification is the definitive source for C# syntax and usage.

Zobacz takżeSee also