Модификатор abstract
Класс с abstract нельзя создать через
new. Абстрактный метод не имеет тела
в базе - в производном классе для него пишут
override.
Обычные методы в абстрактном классе могут
иметь реализацию и быть
virtual.
Синтаксис
abstract class Base
{
public abstract тип Метод();
}
Пример
Давайте реализуем абстрактный метод в наследнике:
using System;
abstract class Shape
{
public abstract string GetLabel();
}
class Box : Shape
{
public override string GetLabel()
{
return "abcde";
}
}
class Program
{
static void Main()
{
Shape item = new Box();
Console.WriteLine(item.GetLabel());
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте сочетаем абстрактный и обычный метод:
using System;
abstract class CounterBase
{
public int Value;
public void AddOne()
{
Value++;
}
public abstract string Format();
}
class Counter : CounterBase
{
public override string Format()
{
return Value.ToString();
}
}
class Program
{
static void Main()
{
var item = new Counter();
item.AddOne();
item.AddOne();
Console.WriteLine(item.Format());
}
}
Результат выполнения кода:
"2"
Пример
Давайте перекроем виртуальный метод в том же наследнике:
using System;
abstract class BaseRow
{
public virtual string Head()
{
return "12345";
}
public abstract string Tail();
}
class Row : BaseRow
{
public override string Head()
{
return "abcde";
}
public override string Tail()
{
return "done";
}
}
class Program
{
static void Main()
{
BaseRow item = new Row();
Console.WriteLine(item.Head() + " " + item.Tail());
}
}
Результат выполнения кода:
abcde done
Смотрите также
-
override,
который завершает абстрактный метод -
virtual,
который разрешает перекрытие с телом в базе -
sealed,
который запрещает дальнейшее наследование -
наследование,
которое связывает абстрактную базу и класс