Funzione astratta vs funzione virtuale in C#
Questo tutorial confronterà la funzione astratta e la funzione virtuale in C#.
Funzione astratta in C#
Una funzione astratta non ha una definizione di se stessa in C#. Significa che ogni classe figlia deve sovrascrivere la funzione astratta e fornire la propria definizione della funzione astratta. Una funzione astratta può essere dichiarata solo all’interno di una classe astratta. La parola chiave abstract
viene utilizzata per creare classi e funzioni astratte in C#. Il seguente esempio di codice ci mostra come creare una funzione astratta con la parola chiave abstract
in C#.
using System;
namespace abstract_vs_virtual {
public abstract class parentClass {
public abstract void name();
}
class Program : parentClass {
public override void name() {
Console.WriteLine("This is Child Class");
}
static void Main(string[] args) {
Program p = new Program();
p.name();
}
}
}
Produzione:
This is Child Class
Abbiamo creato una classe astratta parentClass
e dichiarato una funzione astratta name
all’interno della classe parentClass
. Abbiamo ereditato la classe Program
da parentClass
e sovrascriviamo la funzione name
. Nella funzione main
inizializziamo un’istanza della classe Program
e chiamiamo la funzione name
.
Funzione virtuale in C#
Una funzione virtuale ha una propria definizione, ma consente anche alle classi figlie di sovrascriverla e di avere la propria definizione della stessa funzione. La parola chiave virtual
viene utilizzata per specificare che una funzione è una funzione virtuale in C#. L’esempio di codice seguente mostra come creare una funzione virtuale in C#.
using System;
namespace abstract_vs_virtual {
public class parentClass {
public virtual void name() {
Console.WriteLine("This is the Parent Class");
}
}
class Program : parentClass {
static void Main(string[] args) {
Program p = new Program();
p.name();
parentClass pc = new parentClass();
pc.name();
}
}
}
Produzione:
This is the Parent Class This is the Parent Class
Nel codice precedente, abbiamo creato una classe parentClass
e definito una funzione virtuale name()
all’interno della classe parentClass
. Abbiamo quindi ereditato la classe Program
dalla parentClass
e non abbiamo sovrascritto la funzione name()
all’interno della classe Program
. Nella funzione main, abbiamo creato istanze sia della classe Program
che della parentClass
e abbiamo chiamato la funzione name()
con entrambe le istanze. La chiamata di funzione p.name()
ci ha fornito l’output This is the Parent Class
perché non esiste una definizione della funzione name()
all’interno della classe Program
.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn