Heim >Backend-Entwicklung >C++ >Wie kann ich den Operator für eckige Klammern in C# überladen?

Wie kann ich den Operator für eckige Klammern in C# überladen?

Susan Sarandon
Susan SarandonOriginal
2025-01-07 06:37:41455Durchsuche

How Can I Overload the Square-Bracket Operator in C#?

Überladen des eckigen Klammeroperators in C

In C# ermöglicht der eckige Klammeroperator den Array-Zugriff und den Schlüsselwertabruf aus wörterbuchähnlichen Objekten. Diese Klassen unterstützen jedoch nicht nativ das Überladen des Operators für eckige Klammern. Die Dokumentation für diese Funktion ist unter der Eigenschaft „Item“ in der C#-Dokumentation aufgeführt.

Implementieren des Indexers

Um den Operator in eckigen Klammern in Ihren eigenen Klassen zu überladen, können Sie einen Indexer deklarieren Eigentum. Die Syntax für eine Indexer-Eigenschaft lautet:

public type this[arglist] { get; set; }

Wobei:

  • Typ ist der Typ des Werts, den der Indexer zurückgibt.
  • Arglist ist ein Komma- Getrennte Liste von Parametern, die den Index des abzurufenden oder festzulegenden Elements angeben.

Zum Beispiel: Um den Operator in eckigen Klammern für ein zweidimensionales Array zu überladen, können Sie eine Indexer-Eigenschaft wie folgt deklarieren:

public object this[int x, int y]
{
    get { return array[x, y]; }
    set { array[x, y] = value; }
}

Einschränkungen und Ausnahmen

Es ist wichtig zu beachten, dass der Indexer im Die DataGridView-Klasse löst keine Ausnahme aus, wenn Sie ungültige Koordinaten angeben. Es ist jedoch möglich, dieses Verhalten zu überschreiben, indem Sie Ausnahmen in Ihrer eigenen Implementierung der Indexer-Eigenschaft explizit behandeln.

Um beispielsweise eine ArgumentOutOfRangeException auszulösen, wenn die angegebenen Koordinaten ungültig sind, können Sie die Indexer-Eigenschaft wie folgt implementieren :

public object this[int x, int y]
{
    get
    {
        if (x < 0 || x >= width)
        {
            throw new ArgumentOutOfRangeException("x");
        }
        if (y < 0 || y >= height)
        {
            throw new ArgumentOutOfRangeException("y");
        }

        return array[x, y];
    }

    set
    {
        if (x < 0 || x >= width)
        {
            throw new ArgumentOutOfRangeException("x");
        }
        if (y < 0 || y >= height)
        {
            throw new ArgumentOutOfRangeException("y");
        }

        array[x, y] = value;
    }
}

Das obige ist der detaillierte Inhalt vonWie kann ich den Operator für eckige Klammern in C# überladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn