Menu
Coddy logo textTech

İndeksleyiciler (this[])

Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 37 / 70.

İndeksleyiciler, sınıfınızdaki öğelere dizi benzeri köşeli ayraç notasyonu kullanarak erişmenizi sağlar. collection.GetItem(0) gibi bir metodu çağırmak yerine, daha sezgisel olan collection[0] yazabilirsiniz.

Bir dizinleyiciyi, köşeli parantezlerle birlikte this anahtar kelimesini kullanarak tanımlarsınız:

public class Sentence
{
    private string[] words;
    
    public Sentence(string text)
    {
        words = text.Split(' ');
    }
    
    public string this[int index]
    {
        get { return words[index]; }
        set { words[index] = value; }
    }
}

Artık kelimelere doğal bir şekilde erişebilirsiniz:

Sentence s = new Sentence("Hello World");
Console.WriteLine(s[0]);  // Merhaba
s[1] = "C#";
Console.WriteLine(s[1]);  // C#

Dizinleyiciler yalnızca tam sayılarla sınırlı değildir. İndeks parametresi olarak herhangi bir türü kullanabilirsiniz, bu da onları sözlük benzeri erişim için kullanışlı hale getirir:

public string this[string key]
{
    get { return dictionary[key]; }
    set { dictionary[key] = value; }
}

Özellikler gibi, dizinleyiciler de salt okunur olabilir (setter'ı hariç tutarak) veya erişimcilerinde doğrulama mantığı barındırabilir. Sınıfınız bir koleksiyonu sarmaladığında veya köşeli ayraç notasyonu kodu daha okunabilir hale getirdiğinde idealdirler.

challenge icon

Görev

Kolay

Bir diziyle çalışıyormuş gibi sezgisel köşeli parantez gösterimini kullanarak şarkılara erişmenizi sağlayan bir Playlist sınıfı oluşturalım. Bir dizinleyici kullanarak şarkıların konumlarına göre alınabildiği ve güncellenebildiği bir müzik çalma listesi oluşturacaksınız.

Kodunuzu iki dosyaya ayıracaksınız:

  • Playlist.cs: Playlist ad alanında, dahili bir şarkı koleksiyonunu saran ve bir dizinleyici aracılığıyla dizi benzeri erişim sağlayan bir Music sınıfı oluşturun. Çalma listeniz şunlara sahip olmalıdır:
    • Şarkı başlıklarını depolamak için özel bir string dizisi
    • Virgülle ayrılmış şarkı başlıklarından oluşan bir string kabul eden ve bunu dahili diziye ayıran bir oluşturucu
    • Belirli bir konumdaki şarkıların hem alınmasına hem de ayarlanmasına izin veren, this[int index] kullanan bir dizinleyici
    • Çalma listesindeki şarkı sayısını döndüren salt okunur bir Count özelliği
    • GetAllSongs() kullanarak tüm şarkıları birleştirilmiş hâlde döndüren bir " | " metodu
  • Program.cs: Ana dosyanızda girdiden bir çalma listesi oluşturun, ardından şarkılara erişmek ve şarkıları değiştirmek için dizinleyiciyi kullanın. Şarkıların dizinle okunmasını ve belirli bir konumdaki bir şarkının güncellenmesini gösterin.

Üç girdi alacaksınız:

  • Virgülle ayrılmış bir şarkı başlıkları listesi (ör. Song A,Song B,Song C)
  • Alınacak bir dizin (tam sayı)
  • Aynı dizindeki şarkının yerine konulacak yeni bir şarkı başlığı

Çıktıyı şu biçimde yazdırın:

Total songs: {Count}
Song at index {index}: {song title}
After update: {GetAllSongs()}

Örneğin girdiler Rock Anthem,Jazz Vibes,Pop Hit, 1 ve Blues Classic ise çıktı şöyle olmalıdır:

Total songs: 3
Song at index 1: Jazz Vibes
After update: Rock Anthem | Blues Classic | Pop Hit

Dizinleyicinin, "Jazz Vibes" değerini almak için playlist[1] erişimini kullanmanıza ve ardından güncellemek için playlist[1] = "Blues Classic" atamasını yapmanıza nasıl olanak sağladığına dikkat edin — bu, GetSongAt(1) veya SetSongAt(1, "Blues Classic") gibi metotları çağırmaktan çok daha doğaldır!

Kendin dene

using System;
using Music;

class Program
{
    public static void Main(string[] args)
    {
        // Girdileri oku
        string songList = Console.ReadLine();
        int index = Convert.ToInt32(Console.ReadLine());
        string newSong = Console.ReadLine();

        // TODO: songList üzerinden bir Playlist nesnesi oluşturun

        // TODO: Count özelliğini kullanarak toplam şarkı sayısını yazdırın

        // TODO: İndeksleyiciyi kullanarak verilen indeksteki şarkıyı yazdırın

        // TODO: İndeksleyiciyi kullanarak verilen indeksteki şarkıyı güncelleyin

        // TODO: Güncellemeden sonra GetAllSongs() kullanarak tüm şarkıları yazdırın
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C# derleyicisi