Sök…


Syntax

  • public ReturnTyp detta [IndexType-index] {get {...} set {...}}

Anmärkningar

Indexer tillåter array-liknande syntax att få åtkomst till en egenskap hos ett objekt med ett index.

  • Kan användas i en klass, struktur eller gränssnitt.
  • Kan överbelastas.
  • Kan använda flera parametrar.
  • Kan användas för att komma åt och ställa in värden.
  • Kan använda valfri typ för sitt index.

En enkel indexerare

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

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

Användande:

    var foo = new Foo();

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

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

Visa demo

Indexer med två argument och gränssnitt

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;
        }
    }
}

Överbelastning av indexeraren för att skapa en SparseArray

Genom att överbelasta indexeraren kan du skapa en klass som ser ut och känns som en matris men inte är det. Det kommer att ha O (1) get and set-metoder, har åtkomst till ett element på index 100, och ändå har storleken på elementen inuti det. SparseArray-klassen

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow