Φαντάσου ότι έχεις ένα κουτί με πολλά μικρότερα κουτιά μέσα του, και κάθε μικρό κουτί έχει έναν αριθμό που το ξεχωρίζει. Τα Indexers (Ευρετήρια) στην C# είναι σαν αυτά τα κουτιά. Μας επιτρέπουν να έχουμε πρόσβαση σε αντικείμενα μιας κλάσης σαν να ήταν πίνακες (arrays).
Τι Είναι οι Indexers;
Οι Indexers είναι ειδικές ιδιότητες (properties) που μας επιτρέπουν να προσπελάσουμε στοιχεία μιας συλλογής ή ενός αντικειμένου χρησιμοποιώντας αγκύλες ([]) σαν να ήταν πίνακας. Είναι χρήσιμοι όταν έχουμε μια κλάση που αντιπροσωπεύει μια συλλογή δεδομένων.
Πώς Δημιουργούνται οι Indexers;
Για να δημιουργήσεις έναν Indexer, χρησιμοποιείς την ίδια σύνταξη που χρησιμοποιείς για τις ιδιότητες, αλλά με τη διαφορά ότι χρησιμοποιείς αγκύλες για να ορίσεις την παράμετρο.
Ας δούμε ένα παράδειγμα για να καταλάβεις καλύτερα:
Παράδειγμα: Κλάση για Αποθήκευση Εβδομαδιαίων Θερμοκρασιών
Ας δημιουργήσουμε μια κλάση που αποθηκεύει τις θερμοκρασίες μιας εβδομάδας και χρησιμοποιεί έναν Indexer για να έχεις πρόσβαση σε αυτές τις θερμοκρασίες.
using System;
class WeekTemperatures
{
private int[] temperatures = new int[7];
// Ορισμός του Indexer
public int this[int index]
{
get
{
if (index < 0 || index >= temperatures.Length)
{
throw new IndexOutOfRangeException("Λάθος δείκτης");
}
return temperatures[index];
}
set
{
if (index < 0 || index >= temperatures.Length)
{
throw new IndexOutOfRangeException("Λάθος δείκτης");
}
temperatures[index] = value;
}
}
}
class Program
{
static void Main()
{
WeekTemperatures weekTemperatures = new WeekTemperatures();
// Χρήση του Indexer για να ορίσουμε τις θερμοκρασίες
weekTemperatures[0] = 20; // Δευτέρα
weekTemperatures[1] = 22; // Τρίτη
weekTemperatures[2] = 18; // Τετάρτη
weekTemperatures[3] = 24; // Πέμπτη
weekTemperatures[4] = 26; // Παρασκευή
weekTemperatures[5] = 28; // Σάββατο
weekTemperatures[6] = 30; // Κυριακή
// Χρήση του Indexer για να διαβάσουμε τις θερμοκρασίες
for (int i = 0; i < 7; i++)
{
Console.WriteLine("Η θερμοκρασία της ημέρας " + (i + 1) + " είναι: " + weekTemperatures[i]);
}
}
}
Τι Κάνει Αυτός ο Κώδικας;
- Κλάση
WeekTemperatures
:- Έχει έναν ιδιωτικό πίνακα
temperatures
που αποθηκεύει τις θερμοκρασίες της εβδομάδας. - Ορίζει έναν Indexer
this[int index]
μεget
καιset
για να προσπελάζεις και να τροποποιείς τις θερμοκρασίες μέσω ενός δείκτη.
- Έχει έναν ιδιωτικό πίνακα
- Κλάση
Program
:- Δημιουργεί ένα αντικείμενο της κλάσης
WeekTemperatures
. - Χρησιμοποιεί τον Indexer για να ορίσει τις θερμοκρασίες για κάθε ημέρα της εβδομάδας.
- Χρησιμοποιεί τον Indexer για να διαβάσει και να εκτυπώσει τις θερμοκρασίες.
- Δημιουργεί ένα αντικείμενο της κλάσης
Γιατί Είναι Χρήσιμοι οι Indexers;
Οι Indexers είναι χρήσιμοι γιατί:
- Κάνουν τον κώδικα πιο καθαρό και εύκολο στη χρήση.
- Επιτρέπουν να προσπελάζεις τα στοιχεία μιας συλλογής μέσα από μια κλάση σαν να ήταν πίνακας.
- Παρέχουν έναν εύκολο τρόπο για να διαχειρίζεσαι δεδομένα που σχετίζονται με δείκτες.
Ελπίζω αυτή η εξήγηση να σου έδωσε μια καλή εικόνα για τα Indexers στην C#. Αν έχεις απορίες ή θέλεις περισσότερα παραδείγματα, ενημέρωσέ με!