Share via


Indexeerfuncties (C#-programmeerhandleiding)

Met indexeerfuncties kunnen exemplaren van een klasse of struct net als matrices worden geïndexeerd. De geïndexeerde waarde kan worden ingesteld of opgehaald zonder expliciet een type of exemplaarlid op te geven. Indexeerfuncties lijken op eigenschappen , behalve dat hun accessors parameters gebruiken.

In het volgende voorbeeld wordt een algemene klasse gedefinieerd met eenvoudige get - en set accessor-methoden om waarden toe te wijzen en op te halen. De Program klasse maakt een exemplaar van deze klasse voor het opslaan van tekenreeksen.

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];

   // Define the indexer to allow client code to use [] notation.
   public T this[int i]
   {
      get { return arr[i]; }
      set { arr[i] = value; }
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection[0] = "Hello, World";
      Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

Notitie

Zie Verwante secties voor meer voorbeelden.

Hoofdtekstdefinities van expressies

Het is gebruikelijk dat de accessor van een indexeerfunctie bestaat uit één instructie die een waarde retourneert of instelt. Expressie-bodied leden bieden een vereenvoudigde syntaxis ter ondersteuning van dit scenario. Vanaf C# 6 kan een alleen-lezen indexeerfunctie worden geïmplementeerd als een expressielid, zoals in het volgende voorbeeld wordt weergegeven.

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];
   int nextIndex = 0;

   // Define the indexer to allow client code to use [] notation.
   public T this[int i] => arr[i];

   public void Add(T value)
   {
      if (nextIndex >= arr.Length)
         throw new IndexOutOfRangeException($"The collection can hold only {arr.Length} elements.");
      arr[nextIndex++] = value;
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection.Add("Hello, World");
      System.Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

Houd er rekening mee dat => de hoofdtekst van de expressie wordt geïntroduceerd en dat het get trefwoord niet wordt gebruikt.

Vanaf C# 7.0 kan zowel de get- als set-accessor een implementatie zijn als expressie-bodied leden. In dit geval moeten zowel getset als trefwoorden worden gebruikt. Bijvoorbeeld:

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];

   // Define the indexer to allow client code to use [] notation.
   public T this[int i]
   {
      get => arr[i];
      set => arr[i] = value;
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection[0] = "Hello, World.";
      Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

Overzicht van indexeerfuncties

  • Met indexeerfuncties kunnen objecten op een vergelijkbare manier worden geïndexeerd als matrices.

  • Een get accessor retourneert een waarde. Een set accessor wijst een waarde toe.

  • Het trefwoord wordt gebruikt om de indexeerfunctie te definiëren.

  • Het trefwoord waarde wordt gebruikt om de waarde te definiëren die wordt toegewezen door de set accessor.

  • Indexeerfuncties hoeven niet te worden geïndexeerd door een geheel getal; het is aan u hoe u het specifieke opzoekmechanisme definieert.

  • Indexeerfuncties kunnen worden overbelast.

  • Indexeerfuncties kunnen bijvoorbeeld meer dan één formele parameter hebben bij het openen van een tweedimensionale matrix.

Gerelateerde secties

C#-taalspecificatie

Zie Indexeerfuncties in de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.

Zie ook