Sobes.tech
Junior — Middle

Ποια είναι η διαφορά μεταξύ της χρήσης μιας αφηρημένης κλάσης και μιας διεπαφής κατά τον ορισμό συμβάσεων για κλάσεις;

sobes.tech AI

Απάντηση από AI

Μια αφηρημένη κλάση και μια διεπαφή στο C# χρησιμεύουν στον ορισμό συμβολαίων, αλλά έχουν βασικές διαφορές:

  • Αφηρημένη κλάση μπορεί να περιέχει υλοποιήσεις μεθόδων, πεδίων, κατασκευαστών και ιδιοτήτων. Χρησιμοποιείται όταν θέλετε να ορίσετε μια βασική υλοποίηση και κοινή λειτουργικότητα για τους κληρονόμους.
  • Διεπαφή ορίζει μόνο τις υπογραφές μεθόδων, ιδιοτήτων και γεγονότων χωρίς υλοποίηση (μέχρι το C# 8.0; από το C# 8.0 και μετά, οι διεπαφές μπορούν να περιέχουν προεπιλεγμένες υλοποιήσεις).

Επιπλέον, μια κλάση μπορεί να κληρονομήσει μόνο από μια αφηρημένη κλάση, αλλά μπορεί να υλοποιήσει πολλές διεπαφές.

Παράδειγμα:

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Κοιμάται"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Τσιρίδα"); }
    public void Fly() { Console.WriteLine("Πετάει"); }
}

Έτσι, η αφηρημένη κλάση είναι κατάλληλη για κοινή βασική συμπεριφορά, και η διεπαφή για τον ορισμό ενός συνόλου δυνατοτήτων που μπορούν να υλοποιηθούν από διαφορετικές κλάσεις.