Differenza chiave: i metodi astratti sono i metodi dichiarati ma non implementati. I metodi virtuali sono utilizzati per un'implementazione del polimorfismo basato sul tipo. La classe derivata ha la flessibilità di ri-implementare il metodo virtuale della classe base usando la parola chiave 'override'.
Per esempio -
esempio di classe astratta pubblicaAbstractClass
{
public abstract void exampleabstractMethod ();
pubblico virtuale vuoto nonAbstractMethod ()
{
Console.WriteLine ("L'implementazione è definita nel metodo");
}
class normalNonAbstractClass: exampleAbstractClass
{
public override void exampleabstractMethod ()
{
Console.WriteLine ("Override the exampleabstractMethod of the example exampleAbstractClass");
}
}
Base di classe
{
public virtual void Test ()
{
Console.WriteLine ( "Base.test");
}
}
classe Derivato: base
{
public override void Test ()
{
Console.WriteLine ( "Derived.Test");
}
}
I metodi virtuali sono utilizzati per un'implementazione del polimorfismo basato sul tipo. La classe derivata ha la flessibilità di reimplementare il metodo virtuale della classe base utilizzando la parola chiave override. Sia virtuale che astratto non possono essere utilizzati insieme ai modificatori statici o virtuali o di modifica.
Confronto tra metodo virtuale e astratto:
Metodo virtuale | Metodo astratto | |
Definizione | I metodi virtuali sono utilizzati per un'implementazione del polimorfismo basato sul tipo. | I metodi astratti sono i metodi dichiarati ma non hanno alcuna implementazione. |
Implementazione | Sì, può avere implementazione | No, non può avere alcuna implementazione |
Dev'essere sovrascritto | Non compulsivo | obbligatorio |
Parola chiave utilizzata per distinguerlo da altri tipi di metodi | Virtuale | Astratto |
Classe | La classe contenente il metodo virtuale può essere istanziata. | La classe contenente il metodo astratto non può essere istanziata. Può essere ereditato solo |
Scopo | Ambito del metodo virtuale solo per i membri. | Ambito del metodo astratto per membri e classi. |
Metodo da eseguire (tipo classe oggetto-base) | L'implementazione del genitore verrà chiamata solo nel caso in cui non venga fornita alcuna implementazione nella classe concreta. | Implementazione concreta |
Metodo da eseguire (tipo di classe oggetto-calcestruzzo) | Implementazione concreta | Implementazione concreta |