C# - Indexer: Ein Leitfaden für Anfänger

Hallo, angehende Programmierer! Heute machen wir uns auf eine aufregende Reise in die Welt der C#-Indexer. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind – ich werde Ihr freundlicher Guide sein und alles Schritt für Schritt erklären. Also, tauchen wir ein!

C# - Indexers

Was sind Indexer?

Stellen Sie sich vor, Sie haben ein Bücherregal. Wäre es nicht großartig, wenn Sie einfach sagen könnten "Gib mir das 3. Buch" oder "Gib mir das Buch mit dem Titel 'C# für Anfänger' "? Genau das machen Indexer in C# – sie bieten eine bequeme Möglichkeit, Elemente in einer Klasse, die eine Sammlung von Werten darstellt, zuzugreifen.

Syntax von Indexern

Lassen Sie uns mit der grundlegenden Syntax eines Indexers beginnen:

public Type this[Type index]
{
get { /* gebe den Wert zurück */ }
set { /* setze den Wert */ }
}

Lassen Sie sich von diesem nicht abschrecken! Lassen Sie uns das auseinandernehmen:

  • public: Das bedeutet, der Indexer kann von außerhalb der Klasse aufgerufen werden.
  • Type: Dies ist der Typ des Wertes, den der Indexer zurückgeben oder setzen wird.
  • this: Dieses Schlüsselwort wird verwendet, um einen Indexer zu definieren.
  • [Type index]: Dies gibt den Typ und den Namen des Indexparameters an.
  • get und set: Diese sindAccessor-Methoden, die den Wert abrufen oder setzen.

Verwendung von Indexern

Nun sehen wir Indexer in Aktion mit einem einfachen Beispiel:

public class Bookshelf
{
private string[] books = new string[5];

public string this[int index]
{
get { return books[index]; }
set { books[index] = value; }
}
}

In diesem Beispiel haben wir eine Bookshelf-Klasse mit einem Indexer erstellt. So können wir sie verwenden:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# für Anfänger";
myShelf[1] = "Fortgeschrittene C#";

Console.WriteLine(myShelf[0]); // Ausgabe: C# für Anfänger

Ist das nicht toll? Wir können die Bücher genauso wie bei einem Array zugreifen und ändern, aber wir arbeiten eigentlich mit einer benutzerdefinierten Klasse!

Warum Indexer verwenden?

Vielleicht fragen Sie sich, "Warum nicht einfach ein Array verwenden?" Nun, Indexer geben uns mehr Kontrolle. Wir können Validierung, Protokollierung oder jede Art von benutzerdefinierter Logik hinzufügen, wenn Werte abgerufen oder gesetzt werden. Zum Beispiel:

public string this[int index]
{
get
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("Ungültiger Buchindex!");
return books[index];
}
set
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("Ungültiger Buchindex!");
books[index] = value;
}
}

Jetzt får jemand versucht, ein nicht existierendes Buch zuzugreifen, bekommt er eine hilfreiche Fehlermeldung anstatt das Programm abzustürzen!

Überladene Indexer

Wie bei Methoden können auch Indexer überladen werden. Das bedeutet, wir können mehrere Indexer mit unterschiedlichen Parameter-Typen haben. Lassen Sie uns unser Bookshelf-Beispiel erweitern:

public class Bookshelf
{
private string[] books = new string[5];

// Indexer mit int-Parameter
public string this[int index]
{
get { return books[index]; }
set { books[index] = value; }
}

// Indexer mit string-Parameter
public string this[string title]
{
get
{
return Array.Find(books, book => book == title);
}
set
{
int index = Array.FindIndex(books, book => book == title);
if (index >= 0)
books[index] = value;
}
}
}

Jetzt können wir Bücher nach ihrem Index oder Titel zugreifen:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# für Anfänger";
myShelf[1] = "Fortgeschrittene C#";

Console.WriteLine(myShelf[0]); // Ausgabe: C# für Anfänger
Console.WriteLine(myShelf["Fortgeschrittene C#"]); // Ausgabe: Fortgeschrittene C#

myShelf["C# für Anfänger"] = "C# Meisterschaft";
Console.WriteLine(myShelf[0]); // Ausgabe: C# Meisterschaft

Ist das nicht kraftvoll? Wir können jetzt mit unserem Bookshelf auf mehrere intuitive Weise interagieren!

Indexer-Methoden-Tabelle

Hier ist eine schnelle Referenztabelle der Indexer-Methoden, die wir besprochen haben:

Methode Beschreibung Beispiel
get Ruft den Wert an der angegebenen Stelle ab return books[index];
set Setzt den Wert an der angegebenen Stelle books[index] = value;

Schlussfolgerung

Und das war's! Wir haben die Welt der C#-Indexer erkundet, von der grundlegenden Syntax bis zu überladenen Indexern. Denken Sie daran, Indexer sind mächtige Werkzeuge, die Ihren Code intuitiver und einfacher zu verwenden machen. Sie sind wie magische Sprüche, die Ihre Klassen in leicht zu bedienende Sammlungen verwandeln.

Während Sie Ihre Programmierreise fortsetzen, werden Sie viele weitere aufregende Funktionen in C# entdecken. Aber für jetzt, gratulieren Sie sich selbst – Sie haben Indexer gemeistert! Bleiben Sie dran, bleiben Sie neugierig und viel Spaß beim Programmieren!

Credits: Image by storyset