Dizin Oluşturucular (C# Programlama Kılavuzu)Indexers (C# Programming Guide)

Dizin oluşturucular, bir sınıf veya yapının örneklerinin, tıpkı diziler gibi dizine eklenmesine izin verir.Indexers allow instances of a class or struct to be indexed just like arrays. Dizinli değer, açıkça bir tür veya örnek üyesi belirtilmeden ayarlanabilir veya alınabilir.The indexed value can be set or retrieved without explicitly specifying a type or instance member. Dizin oluşturucular, erişimcilerinin parametre kazanması dışında özelliklere benzer.Indexers resemble properties except that their accessors take parameters.

Aşağıdaki örnek, değer atamak ve almak için basit Get ve set erişimcisi yöntemleriyle genel bir sınıf tanımlar.The following example defines a generic class with simple get and set accessor methods to assign and retrieve values. Program sınıfı dizeleri depolamak için bu sınıfın bir örneğini oluşturur.The Program class creates an instance of this class for storing strings.

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.

Not

Daha fazla örnek için bkz. Ilgili bölümler.For more examples, see Related Sections.

İfade gövdesi tanımlarıExpression Body Definitions

Bir dizin oluşturucunun Get veya set erişimcisinin bir değer döndüren ya da ayarlayan tek bir deyimden oluşması yaygındır.It is common for an indexer's get or set accessor to consist of a single statement that either returns or sets a value. İfade-Bodied Üyeler, bu senaryoyu desteklemek için basitleştirilmiş bir sözdizimi sağlar.Expression-bodied members provide a simplified syntax to support this scenario. C# 6 ' dan itibaren, aşağıdaki örnekte gösterildiği gibi, salt okunurdur bir Dizin Oluşturucu, bir ifade Bodied üyesi olarak uygulanabilir.Starting with C# 6, a read-only indexer can be implemented as an expression-bodied member, as the following example shows.

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.

=> ifade gövdesini tanıtdığına ve get anahtar sözcüğünün kullanılmadığını unutmayın.Note that => introduces the expression body, and that the get keyword is not used.

7,0 ile C# başlayarak, hem Get hem de set erişimcisi, ifade Bodied Üyeler olarak uygulanan bir uygulanmış olabilir.Starting with C# 7.0, both the get and set accessor can be an implemented as expression-bodied members. Bu durumda, hem get hem de set anahtar sözcükleri kullanılmalıdır.In this case, both get and set keywords must be used. Örneğin:For example:

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.

Dizin Oluşturuculara Genel BakışIndexers Overview

  • Dizin oluşturucular, nesnelerin dizilere benzer bir şekilde dizine alınmasını sağlar.Indexers enable objects to be indexed in a similar manner to arrays.

  • get erişimcisi bir değer döndürür.A get accessor returns a value. set erişimcisi bir değer atar.A set accessor assigns a value.

  • Bu anahtar sözcük, Dizin oluşturucuyu tanımlamak için kullanılır.The this keyword is used to define the indexer.

  • Value anahtar sözcüğü, set Indexer tarafından atanan değeri tanımlamak için kullanılır.The value keyword is used to define the value being assigned by the set indexer.

  • Dizin oluşturucuların bir tamsayı değeri ile dizinlenmesini gerekmez; Bu, belirli bir arama mekanizmasını nasıl tanımlayacaksınız.Indexers do not have to be indexed by an integer value; it is up to you how to define the specific look-up mechanism.

  • Dizin oluşturucular aşırı yüklenebilir.Indexers can be overloaded.

  • Dizin oluşturucular birden fazla biçimsel parametreye sahip olabilir, örneğin iki boyutlu bir diziye erişirken.Indexers can have more than one formal parameter, for example, when accessing a two-dimensional array.

İlgili bölümlerRelated Sections

C# Dil BelirtimiC# Language Specification

Daha fazla bilgi için bkz. C# dil belirtiminde Dizin oluşturucular .For more information, see Indexers in the C# Language Specification. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.The language specification is the definitive source for C# syntax and usage.

Ayrıca bkz.See also