Основное отличие: абстрактные методы - это методы, которые объявлены, но не имеют никакой реализации. Виртуальные методы используются для реализации полиморфизма на основе типов. Производный класс обладает гибкостью для повторной реализации виртуального метода базового класса с помощью ключевого слова «переопределить».
Например -
открытый абстрактный класс exampleAbstractClass
{
public abstract void exampleabstractMethod ();
публичная виртуальная пустота nonAbstractMethod ()
{
Console.WriteLine («Реализация определена в методе»);
}
класс normalNonAbstractClass: exampleAbstractClass
{
public override void exampleabstractMethod ()
{
Console.WriteLine ("Переопределение exampleabstractMethod класса exampleAbstractClass");
}
}
базовый класс
{
общедоступный виртуальный тест void ()
{
Console.WriteLine ( "Base.Test");
}
}
Производный класс: База
{
публичное переопределение void Test ()
{
Console.WriteLine ( "Derived.Test");
}
}
Виртуальные методы используются для реализации полиморфизма на основе типов. Производный класс обладает гибкостью повторной реализации виртуального метода базового класса с помощью ключевого слова override. И виртуальный, и абстрактный не могут использоваться вместе со статическими или виртуальными модификаторами или модификаторами переопределения.
Сравнение виртуального и абстрактного метода:
Виртуальный метод | Абстрактный метод | |
Определение | Виртуальные методы используются для реализации полиморфизма на основе типов. | Абстрактные методы - это методы, которые объявлены, но не имеют никакой реализации. |
Реализация | Да, может иметь реализацию | Нет, не может быть никакой реализации |
Нужно переопределить | Не обязательно | обязательное |
Ключевое слово используется, чтобы отличить его от других типов методов | виртуальный | Аннотация |
Учебный класс | Класс, содержащий виртуальный метод, может быть создан. | Класс, содержащий абстрактный метод, не может быть создан. Это может быть только унаследовано. |
Объем | Область действия виртуального метода только для членов. | Область применения абстрактного метода для членов и классов. |
Метод для выполнения (тип базового класса объекта) | Родительская реализация будет вызываться только в том случае, если в конкретном классе реализация не предусмотрена. | Конкретная реализация |
Метод, который будет выполнен (объектно-конкретный тип класса) | Конкретная реализация | Конкретная реализация |