Funzione astratta vs funzione virtuale in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Funzione astratta in C#
  2. Funzione virtuale in C#
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.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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

Articolo correlato - Csharp Function