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("Πετάει"); }
}
Έτσι, η αφηρημένη κλάση είναι κατάλληλη για κοινή βασική συμπεριφορά, και η διεπαφή για τον ορισμό ενός συνόλου δυνατοτήτων που μπορούν να υλοποιηθούν από διαφορετικές κλάσεις.