Junior
Έχετε χρησιμοποιήσει αφηρημένες κλάσεις στα έργα σας;
sobes.tech AI
Απάντηση από AI
Ναι, το έχω χρησιμοποιήσει. Οι αφηρημένες κλάσεις χρησιμοποιούνταν για τη δημιουργία βασικών δομών με κοινές μεθόδους και ιδιότητες, οι οποίες κληρονομούνται από συγκεκριμένες κλάσεις.
// Δήλωση αφηρημένης κλάσης
public abstract class Shape
{
// Αφηρημένη μέθοδος που πρέπει να υλοποιηθεί στις υποκλάσεις
public abstract double GetArea();
// Εικονική μέθοδος με προεπιλεγμένη υλοποίηση, που μπορεί να υπερισχύσει
public virtual void Draw()
{
Console.WriteLine("Ζωγραφική σχήματος.");
}
}
// Συγκεκριμένη κλάση που κληρονομεί από Shape
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
// Υλοποίηση της αφηρημένης μεθόδου
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
// Υπερκαλύπτει την εικονική μέθοδο
public override void Draw()
{
Console.WriteLine($"Ζωγραφική κύκλου με ακτίνα {Radius}.");
}
}
Κύρια σενάρια χρήσης:
- Ορισμός γενικής σύμβασης: Οι αφηρημένες κλάσεις επιτρέπουν τον ορισμό ενός συνόλου μεθόδων και ιδιοτήτων που πρέπει να υπάρχουν σε όλες τις υποκλάσεις.
- Μερική υλοποίηση: Δυνατότητα παροχής μερικής υλοποίησης λειτουργικότητας στην βασική κλάση, αποφεύγοντας την πλήρη διπλοτυπία κώδικα στις υποκλάσεις.
- Σχεδιαστικό μοτίβο: Χρησιμοποιούνται συχνά στην υλοποίηση μοτίβων, όπως το "Μέθοδος προτύπου".
Διαφορές με τις διεπαφές:
| Χαρακτηριστικό | Αφηρημένη κλάση | Διεπαφή |
|---|---|---|
| Κληρονόμηση | Απαγορεύεται η πολλαπλή κληρονόμηση | Επιτρέπεται η πολλαπλή υλοποίηση |
| Υλοποίηση | Μπορεί να περιέχει υλοποιήσεις μεθόδων | Μέχρι C# 8.0 - μόνο δηλώσεις, μετά - προεπιλεγμένες υλοποιήσεις |
| Μέλη | Μπορεί να έχει πεδία, κατασκευαστές, εικονικές/αφηρημένες/κανονικές μεθόδους | Μέχρι C# 8.0 - μόνο μέθοδοι και ιδιότητες, μετά - επίσης στατικά μέλη και προεπιλεγμένες υλοποιήσεις |
| Κατάσταση | Μπορεί να έχει κατάσταση (μέσω πεδίων) | Δεν μπορεί να έχει κατάσταση |