Hovedforskjell: Abstrakte metoder er metodene som er deklarert, men har ingen implementering. Virtuelle metoder brukes til implementering av den typebaserte polymorfismen. Den avledede klassen har fleksibiliteten til å implementere den virtuelle metoden til baseklassen ved å bruke søkeordet 'overstyring'.
For eksempel -
offentlig abstrakt klasse eksempelAbstractClass
{
offentlig abstrakt tomt eksempelabstraktMetode ();
offentlig virtuell tomgang nonAbstractMethod ()
{
Console.WriteLine ("Implementering er definert i metoden");
}
klasse normalNonAbstractClass: exampleAbstractClass
{
offentlig overstyring tomt eksempelabstraktMetode ()
{
Console.WriteLine ("Overstyrer eksempelabstractMethod for klassetekstAbstractClass");
}
}
klassebase
{
offentlig virtuell ugyldig test ()
{
Console.WriteLine ( "Base.Test");
}
}
klasse avledet: base
{
Offentlig overstyring ugyldig Test ()
{
Console.WriteLine ( "Derived.Test");
}
}
Virtuelle metoder brukes til implementering av den typebaserte polymorfismen. Den avledede klassen har fleksibiliteten til å implementere den virtuelle metoden til baseklassen ved å bruke overstyringsnavnet. Både virtuelt og abstrakt kan ikke brukes sammen med statiske eller virtuelle eller overstyre modifikatorer.
Sammenligning mellom virtuell og abstrakt metode:
Virtuell metode | Abstrakt Metode | |
Definisjon | Virtuelle metoder brukes til implementering av den typebaserte polymorfismen. | Abstrakte metoder er metodene som er deklarert, men har ingen implementering. |
Gjennomføring | Ja, kan ha implementering | Nei, kan ikke ha noen implementering |
Trenger å bli overstyrt | Ikke obligatorisk | obligatorisk |
Søkeord brukes til å skille det fra andre typer metoder | Virtuell | Abstrakt |
Klasse | Klasse som inneholder virtuell metode kan bli instantiated. | Klasse som inneholder abstrakt metode kan ikke opprettes. Det kan bare arves. |
omfang | Virtuell metode er bare tilgjengelig for medlemmer. | Abstrakt metode er omfang til medlemmer og klasser. |
Metode som skal utføres (objektbasert klassetype) | Foreldreimplementering vil bli kalt bare i tilfelle der det ikke er gjennomført implementering i konkrete klassen. | Betongimplementering |
Metode som skal utføres (objekt-konkret klassetype) | Betongimplementering | Betongimplementering |