Aracılığıyla paylaş


Dizinleyiciler (C# Programlama Kılavuzu) kullanma

Dizinleyicileri oluşturmanıza olanak tanıyan bir sözdizimi kullanışlı olan bir sınıfı, struct, veya arabirimi istemci uygulamaları bir dizi olarak erişebilirsiniz.Dizinleyicileri iç koleksiyonuna veya dizi kapsüllemek için birincil amacı olan türlerinde en sık uygulanır.Örneğin, 24 saatlik dönem 10 farklı zamanlarda kayıtlı olan Farenheit sıcaklık gösteren TempRecord adında bir sınıfı olduğunu varsayalım."Sıcaklıkları göstermek için temps" float türünde adında bir array sınıfı içerir ve bir DateTime sıcaklıklar kaydedilme tarihi temsil eder.Bu sınıfta bir dizinleyici uygulayarak TempRecord örnek sıcaklıklar istemcilerin erişebilecekleri float temp = tr[4] yerine olarak float temp = tr.temps[4].İndis oluşturucu gösterimini yalnızca istemci uygulamaları için sözdizimi kolaylaştırır; Ayrıca sınıf ve amacı anlamak diğer geliştiriciler için daha sezgisel yapar.

Bir sınıf veya yapı birimi bir dizinleyici bildirmek için Bu Bu örnekte olduğu gibi anahtar sözcük:

public int this[int index]    // Indexer declaration
{
    // get and set accessors
}

Notlar

Bir dizinleyici türüne ve parametrelerinin tipi en az dizinleyici olarak erişilebilir olmalıdır.Erişilebilirlik düzeyleri hakkında daha fazla bilgi için bkz: Erişim değiştiricileri.

Olan bir arabirim dizinleyicileri kullanmak hakkında daha fazla bilgi için bkz: Arabirim dizinleyicileri.

Bir dizinleyici imza numarası ve resmi parametrelerinin tipi oluşur.Dizinleyicinin türü veya biçimsel parametre adlarını içermez.Aynı sınıf içinde birden fazla dizin oluşturucu olarak bildirirseniz, farklı imzalar olmaları gerekir.

Bir dizinleyici değeri değişken olarak sınıflandırılmış değildir; Bu nedenle, bir dizinleyici değeri olarak geçirilemez bir ref veya dışarı parametresi.

Dizin Oluşturucu diğer diller kullanan bir adla sağlayacak bir name öznitelik bildiriminde.Örne?in:

[System.Runtime.CompilerServices.IndexerName("TheItem")]
public int this [int index]   // Indexer declaration
{
}

Bu dizin oluşturucu adı olur TheItem.Name özniteliği sağlama değil olun Item varsayılan adı.

Örnek 1

2549tw02.collapse_all(tr-tr,VS.110).gifDescription

Aşağıdaki örnek, bir özel dizi alan nasıl gösterir tempsve bir dizinleyici.Dizin Oluşturucu örneği doğrudan erişim sağlayan tempRecord[i].İndis oluşturucu kullanarak alternatif bir dizi olarak bildirmektir bir ortak üye ve kendi üyelerinden tempRecord.temps[i], doğrudan.

Bir dizinleyici 's erişim, örneğin, içinde çalışırken fark bir Console.Write deyimi, Al erişimci çağrıldığında.Bu nedenle, yok, get erişimci var, bir derleme zamanı hatası oluşur.

2549tw02.collapse_all(tr-tr,VS.110).gifKod

class TempRecord
{
    // Array of temperature values
    private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 
                                            61.3F, 65.9F, 62.1F, 59.2F, 57.5F };

    // To enable client code to validate input 
    // when accessing your indexer.
    public int Length
    {
        get { return temps.Length; }
    }
    // Indexer declaration.
    // If index is out of range, the temps array will throw the exception.
    public float this[int index]
    {
        get
        {
            return temps[index];
        }

        set
        {
            temps[index] = value;
        }
    }
}

class MainClass
{
    static void Main()
    {
        TempRecord tempRecord = new TempRecord();
        // Use the indexer's set accessor
        tempRecord[3] = 58.3F;
        tempRecord[5] = 60.1F;

        // Use the indexer's get accessor
        for (int i = 0; i < 10; i++)
        {
            System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]);
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();

    }
}
/* Output:
        Element #0 = 56.2
        Element #1 = 56.7
        Element #2 = 56.5
        Element #3 = 58.3
        Element #4 = 58.8
        Element #5 = 60.1
        Element #6 = 65.9
        Element #7 = 62.1
        Element #8 = 59.2
        Element #9 = 57.5
    */

Diğer değerleri kullanarak dizin oluşturma

C# dizin türü tamsayı sınırlamaz.Örneğin, bir dize ile bir dizinleyici kullanmak yararlı olabilir.Topluluk dizeyi aramak ve uygun değer döndüren bir dizinleyici uygulanabilir.Erişimcileri aşırı gibi dize ve tamsayı sürümleri bileşenleriyle.

Örnek 2

2549tw02.collapse_all(tr-tr,VS.110).gifDescription

Bu örnekte, bir sınıf, haftanın günlerini depolar bildirildi.A get erişimci bildirilmiş bir dize, bir gün adı geçen ve karşılık gelen tamsayı döndürür.Örneğin, Pazar 0 döndürür, Pazartesi 1 dönmek vb..

2549tw02.collapse_all(tr-tr,VS.110).gifKod

// Using a string as an indexer value
class DayCollection
{
    string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };

    // This method finds the day or returns -1
    private int GetDay(string testDay)
    {

        for (int j = 0; j < days.Length; j++)
        {
            if (days[j] == testDay)
            {
                return j;
            }
        }

        throw new System.ArgumentOutOfRangeException(testDay, "testDay must be in the form \"Sun\", \"Mon\", etc");
    }

    // The get accessor returns an integer for a given string
    public int this[string day]
    {
        get
        {
            return (GetDay(day));
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        DayCollection week = new DayCollection();
        System.Console.WriteLine(week["Fri"]);

        // Raises ArgumentOutOfRangeException
        System.Console.WriteLine(week["Made-up Day"]);

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
// Output: 5

Güçlü Programlama

Hangi güvenlik ve güvenilirlik dizinleyiciler, geliştirilebilir iki ana yolu vardır:

  • Bazı tür istemci kodu geçersiz dizin değeri içinde geçirme olasılığı işlemek için hata işleme stratejisini birleştirmek dikkat edin.TempRecord sınıfı, bu konudaki ilk örnek giriş dizinleyici geçirmeden önce doğrulamak istemci kodu sağlayan bir Length özelliğini sağlar.Hata işleme kodunu dizinleyici içine de yerleştirebilirsiniz.Kullanıcılar için bir dizinleyici erişimcisinin içinde throw istisnaları belgelediğinizden emin olun.

  • Erişilebilirliğini set get ve set makul olduğu gibi kısıtlı olacak şekilde erişimcileri.Bunun için önemli olan set erişimci özellikle.Daha fazla bilgi için bkz. Kısıtlama erişeninin erişilebilirlik (C# Programlama Kılavuzu).

Ayrıca bkz.

Başvuru

Dizinleyiciler (C# Programlama Kılavuzu)

Özellikler (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu