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
Koncepcje
Przewodnik programowania w języku C#