Kluczowa różnica: Metody abstrakcyjne to metody, które są zadeklarowane, ale nie mają żadnej implementacji. Wirtualne metody są stosowane do implementacji polimorfizmu opartego na typie. Klasa pochodna ma elastyczność ponownego wdrażania metody wirtualnej klasy bazowej za pomocą słowa kluczowego "zastąp".
Na przykład -
public abstract class exampleAbstractClass
{
public abstract void exampleabstractMethod ();
public virtual void nonAbstractMethod ()
{
Console.WriteLine ("Implementacja jest zdefiniowana w metodzie");
}
class normalNonAbstractClass: exampleAbstractClass
{
publiczne nadpisanie void exampleabstractMethod ()
{
Console.WriteLine ("Przesłanianie metody exampleabstractMethod klasy exampleAbstractClass");
}
}
klasa podstawowa
{
publiczny wirtualny void Test ()
{
Console.WriteLine ("Base.Test");
}
}
class Derived: Base
{
publiczne nadpisanie void Test ()
{
Console.WriteLine ("Derived.Test");
}
}
Wirtualne metody są stosowane do implementacji polimorfizmu opartego na typie. Klasa pochodna ma elastyczność ponownego wdrażania metody wirtualnej klasy bazowej za pomocą słowa kluczowego override. Zarówno wirtualne, jak i abstrakcyjne nie mogą być używane razem z modyfikatorami statycznymi lub wirtualnymi lub nadpisującymi.
Porównanie metody wirtualnej i abstrakcyjnej:
Metoda wirtualna | Metoda abstrakcyjna | |
Definicja | Wirtualne metody są stosowane do implementacji polimorfizmu opartego na typie. | Metody abstrakcyjne to metody, które są zadeklarowane, ale nie mają żadnej implementacji. |
Realizacja | Tak, może mieć implementację | Nie, nie może mieć żadnej implementacji |
Trzeba nadpisać | Nieobowiązkowe | Obowiązkowy |
Słowo kluczowe używane do odróżnienia go od innych typów metod | Wirtualny | Abstrakcyjny |
Klasa | Klasa zawierająca wirtualną metodę może być utworzona. | Klasa zawierająca metodę abstrakcyjną nie może być utworzona. To może być odziedziczone. |
Zakres | Zakres metody wirtualnej tylko dla członków. | Zakres metody abstrakcyjnej dla członków i klas. |
Metoda do wykonania (typ klasy obiektu bazowego) | Implementacja nadrzędna będzie wywoływana tylko w przypadku, gdy żadna implementacja nie jest zapewniona w konkretnej klasie. | Konkretna realizacja |
Metoda do wykonania (typ klasy obiekt-beton) | Konkretna realizacja | Konkretna realizacja |