Kľúčový rozdiel: Abstraktné metódy sú metódy, ktoré sú deklarované, ale nemajú žiadnu implementáciu. Virtuálne metódy sa používajú na implementáciu typového polymorfizmu. Odvodená trieda má flexibilitu opätovného zavedenia virtuálnej metódy základnej triedy pomocou kľúčového slova "override".
Napríklad -
verejná abstraktná trieda exampleAbstractClass
{
verejné abstraktné neplatné exampleabstractMethod ();
verejná virtual void nonAbstractMethod ()
{
Console.WriteLine ("Implementácia je definovaná v metóde");
}
class normalNonAbstractClass: exampleAbstractClass
{
verejné override void exampleabstractMethod ()
{
Console.WriteLine ("Prepísanie príkladuabstraktnej metódy triedy exampleAbstractClass");
}
}
trieda základne
{
public virtual void Test ()
{
Console.WriteLine ( "Base.test");
}
}
trieda Odvodené: základňa
{
verejné override void Test ()
{
Console.WriteLine ( "Derived.Test");
}
}
Virtuálne metódy sa používajú na implementáciu typového polymorfizmu. Odvodená trieda má flexibilitu opätovného zavedenia virtuálnej metódy základnej triedy pomocou kľúčového slova override. Obe virtuálne aj abstraktné nemožno použiť spolu so statickými alebo virtuálnymi modifikátormi.
Porovnanie medzi virtuálnou a abstraktnou metódou:
Virtuálna metóda | Abstraktná metóda | |
definícia | Virtuálne metódy sa používajú na implementáciu typového polymorfizmu. | Abstraktné metódy sú metódy, ktoré sú deklarované, ale nemajú žiadnu implementáciu. |
uskutočnenie | Áno, môže mať implementáciu | Nie, nemôže mať žiadnu implementáciu |
Potrebujete byť prevratné | Nie je povinné | povinný |
Kľúčové slovo sa používa na odlíšenie od iných typov metód | virtuálne | abstraktné |
Trieda | Trieda obsahujúca virtuálnu metódu môže byť inštancovaná. | Trieda obsahujúca abstraktnú metódu nemôže byť inštancovaná. Dá sa to zdediť len. |
Rozsah | Rozsah virtuálnej metódy len pre členov. | Rozsah abstraktnej metódy pre členov a triedy. |
Spôsob, ktorý sa má vykonať (typ objektu typu-základňa) | Rodičovská implementácia sa bude nazývať iba v prípade, ak v konkrétnej triede nie je implementovaná žiadna implementácia. | Konkrétna implementácia |
Metóda, ktorá sa má vykonať (typ objektu typu betónu) | Konkrétna implementácia | Konkrétna implementácia |