Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C# Indexer: Objekte wie Arrays indizieren

Was ist ein Indexer?

Indexer ermöglicht Instanzen einer Klasse/Struktur, mit Array-Syntax obj[index] angesprochen zu werden. Die Klasse verhält sich wie ein virtuelles Array.

Syntax (eindimensional)

public class Sample
{
    private string[] data = new string[10];

    public string this[int index] // Indexer-Name ist immer 'this'
    {
        get
        {
            if (index >= 0 && index < data.Length) return data[index];
            return null; // oder Exception
        }
        set
        {
            if (index >= 0 && index < data.Length) data[index] = value;
        }
    }
}

Beispiel: Namensliste mit Indexer

public class IndexedNames
{
    private const int Size = 10;
    private string[] names = new string[Size];

    public IndexedNames()
    {
        for (int i = 0; i < Size; i++) names[i] = "N.A.";
    }

    public string this[int index]
    {
        get => (index >= 0 && index < Size) ? names[index] : "";
        set { if (index >= 0 && index < Size) names[index] = value; }
    }
}

// Nutzung
var list = new IndexedNames();
list[0] = "Zara";
list[1] = "Riz";
for (int i = 0; i < IndexedNames.Size; i++)
    Console.WriteLine(list[i]);

Überladene Indexer (Multiple Parameter / Andere Typen)

Indexer können überladen werden (unterschiedliche Parameter-Typen/Anzahl). Der Index muss nicht int sein.

Beispiel: String-Indexer für Lookup

public class IndexedNames
{
    // ... (wie oben)

    // Zweiter Indexer: Suche nach Name → Index
    public int this[string name]
    {
        get
        {
            for (int i = 0; i < Size; i++)
                if (names[i] == name) return i;
            return -1; // nicht gefunden
        }
    }
}

// Nutzung
Console.WriteLine(list["Nuha"]); // Ausgabe: 2 (Index)

Mehrdimensionale Indexer

public class Matrix
{
    private double[,] data = new double[3, 3];

    public double this[int row, int col]
    {
        get => data[row, col];
        set => data[row, col] = value;
    }
}

var m = new Matrix();
m[1, 2] = 3.14;
Console.WriteLine(m[1, 2]);

Indexer vs. Properties

MerkmalPropertyIndexer
NameBenutzerdefiniert (Name)Immer this
ParameterKeineMindestens einer (Index)
Zugriffobj.Propobj[index]
ÜberladbarNeinJa
Statisch möglichJaNein (immer Instanzmember)

Best Practices

  • Index-Validierung (Bounds Checking) im Getter/Setter.
  • ArgumentOutOfRangeException werfen statt stillschweigend null/Default zurückzugeben (außer Design erfordert es).
  • this[int index] für listenartige Semantik; String-Indexer für Dictionary-ähnlichen Lookup.
  • Interface IList<T>, IReadOnlyList<T> implementieren, wenn passend.

C Sprache

  1. C# Hello World – Ihre erste C#-Anwendung erstellen
  2. C# Keywords und Identifiers verstehen: Regeln, Listen und Best Practices
  3. C# Variablen & Primitive Datentypen meistern: Der komplette Guide
  4. C# Operatoren – Umfassender Leitfaden zu Operatoren in C#
  5. C# Bitweise und Bit-Shift-Operatoren meistern: Umfassender Leitfaden
  6. C# Grundlagen: Eingabe und Ausgabe Essentials
  7. C# Ausdrücke, Anweisungen & Blöcke: Umfassender Leitfaden mit Beispielen
  8. C# Kommentare meistern: Arten, Best Practices und XML-Dokumentation
  9. C# Switch Statement meistern: Syntax, Beispiele & Best Practices
  10. C# Ternärer Operator: Knapper Leitfaden zu bedingten Ausdrücken