Suche…


Syntax

  • public ReturnType [IndexType-Index] {get {...} set {...}}

Bemerkungen

Mit dem Indexer kann mit einer Array-ähnlichen Syntax auf eine Eigenschaft eines Objekts mit einem Index zugegriffen werden.

  • Kann für eine Klasse, Struktur oder Schnittstelle verwendet werden.
  • Kann überladen werden.
  • Kann mehrere Parameter verwenden.
  • Kann verwendet werden, um auf Werte zuzugreifen und sie einzustellen.
  • Kann einen beliebigen Typ für den Index verwenden.

Ein einfacher Indexer

class Foo
{
    private string[] cities = new[] { "Paris", "London", "Berlin" };

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

Verwendungszweck:

    var foo = new Foo();

    // access a value    
    string berlin = foo[2];

    // assign a value
    foo[0] = "Rome";

Demo anzeigen

Indexer mit 2 Argumenten und Schnittstelle

interface ITable { 
    // an indexer can be declared in an interface
    object this[int x, int y] { get; set; }
}

class DataTable : ITable
{
    private object[,] cells = new object[10, 10];

    /// <summary>
    /// implementation of the indexer declared in the interface
    /// </summary>
    /// <param name="x">X-Index</param>
    /// <param name="y">Y-Index</param>
    /// <returns>Content of this cell</returns>
    public object this[int x, int y]
    {
        get
        {
            return cells[x, y];
        }
        set
        {
            cells[x, y] = value;
        }
    }
}

Überladen des Indexers zum Erstellen eines SparseArray

Durch Überladen des Indexers können Sie eine Klasse erstellen, die wie ein Array aussieht und sich anfühlt, aber nicht ist. Es gibt O (1) get- und set-Methoden, kann auf ein Element im Index 100 zugreifen und hat dennoch die Größe der Elemente in sich. Die SparseArray-Klasse

class SparseArray
    {
        Dictionary<int, string> array = new Dictionary<int, string>();

        public string this[int i]
        {
            get
            {
                if(!array.ContainsKey(i))
                {
                    return null;
                }
                return array[i];
            }
            set
            {
                if(!array.ContainsKey(i))
                    array.Add(i, value);
            }
        }
    }


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow