Οι διεπαφές (interfaces) στη γλώσσα C# είναι μια συμβολική συμβολοσειρά κώδικα που ορίζει ένα σύνολο μεθόδων χωρίς να παρέχει υλοποίηση. Οι διεπαφές παρέχουν έναν τρόπο για να προσδιορίσουμε ένα συμβόλαιο (contract) για τις κλάσεις που τις υλοποιούν. Μια κλάση μπορεί να υλοποιήσει πολλές διεπαφές, προσφέροντας έτσι τη δυνατότητα να χρησιμοποιηθεί ως πολλαπλής κληρονομικότητας.
Για να δηλώσουμε μια διεπαφή στη C#, χρησιμοποιούμε τη λέξη-κλειδί “interface” ακολουθούμενη από το όνομα της διεπαφής και μια λίστα με τις μεθόδους που πρέπει να υλοποιηθούν. Οι μέθοδοι αυτές είναι δηλωμένες χωρίς σώματα με την προσθήκη μόνο των προδιαγραφών τους. Οι κλάσεις που υλοποιούν μια διεπαφή πρέπει να παρέχουν την υλοποίηση των μεθόδων που ορίζονται στη διεπαφή.
Ο σκοπός των διεπαφών είναι να παρέχουν μια κοινή συμβολοσειρά κώδικα για αντικείμενα που προέρχονται από διαφορετικές κλάσεις, αλλά παρέχουν μια συγκεκριμένη συμπεριφορά. Αυτό επιτρέπει την αντικατάσταση των αντικειμένων με άλλα που υλοποιούν την ίδια διεπαφή, προσφέροντας έτσι ευελιξία και επαναχρησιμοποίηση κώδικα.
Συνοψίζοντας, οι διεπαφές στη γλώσσα C# είναι ένα μηχανισμός που μας επιτρέπει να ορίζουμε ένα σύνολο μεθόδων χωρίς υλοποίηση, το οποίο πρέπει να υλοποιηθεί από κλάσεις που τις υλοποιούν. Αυτό μας δίνει τη δυνατότητα να χρησιμοποιούμε πολλαπλή κληρονομικότητα και να αντικαθιστούμε αντικείμενα με άλλα που υλοποιούν την ίδια διεπαφή, προσφέροντας ευελιξία στον κώδικα.
Μπορείτε να δημιουργήσετε μια διεπαφή με την χρήση της λέξης-κλειδί interface. Ας δούμε ένα παράδειγμα:
using System; // Δήλωση διεπαφής IAnimal interface IAnimal { void AnimalSound(); // Μέθοδος για τον ήχο του ζώου } // Ορισμός κλάσης Dog που υλοποιεί τη διεπαφή IAnimal class Dog : IAnimal { public void AnimalSound() { Console.WriteLine("The dog says: Woof woof!"); // Εκτύπωση ήχου σκύλου } } // Ορισμός κλάσης Cat που υλοποιεί τη διεπαφή IAnimal class Cat : IAnimal { public void AnimalSound() { Console.WriteLine("The cat says: Meow!"); // Εκτύπωση ήχου γάτας } }
Ο παραπάνω κώδικας σε C# περιέχει τον ορισμό ενός διεπαφής (interface
) με το όνομα IAnimal
, καθώς και τις κλάσεις Dog
και Cat
που υλοποιούν αυτήν τη διεπαφή.
Η διεπαφή IAnimal
ορίζει μια μέθοδο με το όνομα AnimalSound()
χωρίς να έχει υλοποίηση. Αυτή η μέθοδος πρέπει να υλοποιηθεί από οποιαδήποτε κλάση χρησιμοποιεί αυτήν τη διεπαφή.
Οι κλάσεις Dog
και Cat
κληρονομούν τη διεπαφή IAnimal
και υλοποιούν τη μέθοδο AnimalSound()
. Η υλοποίηση αυτής της μεθόδου σε κάθε κλάση εκτελεί μια ενέργεια εκτύπωσης στην οθόνη του αντίστοιχου ήχου που παράγεται από το ζώο.
Αν δημιουργηθεί ένα αντικείμενο τύπου Dog
και κληθεί η μέθοδος AnimalSound()
, θα εκτυπωθεί το μήνυμα “The dog says: Woof woof!”. Αντίστοιχα, αν δημιουργηθεί ένα αντικείμενο τύπου Cat
και κληθεί η μέθοδος AnimalSound()
, θα εκτυπωθεί το μήνυμα “The cat says: Meow!”.
Ο κώδικας αυτός δείχνει τη χρήση διεπαφών στην C# και την ιδέα της πολυμορφισμού, όπου διάφορες κλάσεις μπορούν να υλοποιήσουν μια κοινή διεπαφή με διαφορετικούς τρόπους.
Τώρα μπορούμε να δημιουργήσουμε αντικείμενα από τις κλάσεις Dog και Cat και να καλέσουμε τη μέθοδο AnimalSound():
Dog myDog = new Dog(); Cat myCat = new Cat(); myDog.AnimalSound(); // Εκτυπώνει "The dog says: Woof woof!" myCat.AnimalSound(); // Εκτυπώνει "The cat says: Meow!"
Σε αυτό το παράδειγμα, δημιουργούμε αντικείμενα από τις κλάσεις Dog και Cat και καλούμε τη μέθοδο AnimalSound() σε αυτά. Και οι δύο κλάσεις υλοποιούν τη διεπαφή IAnimal και παρέχουν τη δική τους υλοποίηση για τη μέθοδο AnimalSound().
Για να υλοποιήσετε πολλαπλές διεπαφές (interfaces) σε μια κλάση, χρησιμοποιήστε την λέξη-κλειδί interface και χωρίστε τις διεπαφές με κόμμα:
using System; // Δημιουργία διεπαφής IAnimal interface IAnimal { void AnimalSound(); // Μέθοδος για τον ήχο του ζώου } // Δημιουργία διεπαφής IJumpable interface IJumpable { void Jump(); // Μέθοδος για την άλματος } // Δημιουργία κλάσης Dog που υλοποιεί τις διεπαφές IAnimal και IJumpable class Dog : IAnimal, IJumpable { public void AnimalSound() { Console.WriteLine("The dog says: Woof woof!"); // Εκτύπωση ήχου σκύλου } public void Jump() { Console.WriteLine("The dog jumps!"); // Εκτύπωση μηνύματος για το άλμα του σκύλου } }
Ο παραπάνω κώδικας στη γλώσσα C# ορίζει διεπαφές και μια κλάση που τις υλοποιεί. Ας αναλύσουμε τι κάνει ο κάθε μέρος του κώδικα:
- Ορισμός διεπαφής
IAnimal
: Η διεπαφήIAnimal
δηλώνει μια μέθοδοAnimalSound()
χωρίς υλοποίηση. - Ορισμός διεπαφής
IJumpable
: Η διεπαφήIJumpable
δηλώνει μια μέθοδοJump()
χωρίς υλοποίηση. - Ορισμός της κλάσης
Dog
:
- Η κλάση
Dog
υλοποιεί τις διεπαφέςIAnimal
καιIJumpable
. - Η μέθοδος
AnimalSound()
εκτυπώνει το μήνυμα “The dog says: Woof woof!”. - Η μέθοδος
Jump()
εκτυπώνει το μήνυμα “The dog jumps!”.
Ο κώδικας ορίζει τις διεπαφές IAnimal
και IJumpable
για να προσδιορίσει τη συμπεριφορά που πρέπει να έχουν οι κλάσεις που τις υλοποιούν. Η κλάση Dog
υλοποιεί αυτές τις διεπαφές και παρέχει τις αντίστοιχες υλοποιήσεις των μεθόδων. Κατά τη δημιουργία ενός αντικειμένου τύπου Dog
, μπορεί να χρησιμοποιηθούν και οι δύο διεπαφές για να κληθούν οι μέθοδοι AnimalSound()
και Jump()
και να εκτελεστούν οι αντίστοιχες ενέργειες.
Τώρα μπορούμε να δημιουργήσουμε ένα αντικείμενο από την κλάση Dog και να καλέσουμε τις μεθόδους AnimalSound() και Jump():
Dog myDog = new Dog(); myDog.AnimalSound(); // Εκτυπώνει "The dog says: Woof woof!" myDog.Jump(); // Εκτυπώνει "The dog jumps!"
Σε αυτό το παράδειγμα, δημιουργούμε ένα αντικείμενο από την κλάση Dog και καλούμε τις μεθόδους AnimalSound() και Jump(). Η κλάση Dog υλοποιεί και τις δύο διεπαφές IAnimal και IJumpable, οπότε μπορούμε να καλέσουμε τις αντίστοιχες μεθόδους.