Indexer (this[])
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 37 dari 70.
Indexer memungkinkan kamu mengakses elemen dalam class-mu menggunakan notasi tanda kurung siku seperti pada array. Alih-alih memanggil method seperti collection.GetItem(0), kamu bisa menulis collection[0] yang lebih intuitif.
Kamu mendefinisikan indexer menggunakan kata kunci this dengan tanda kurung siku:
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; }
}
}Sekarang kamu dapat mengakses kata-kata secara alami:
Sentence s = new Sentence("Hello World");
Console.WriteLine(s[0]); // Hello
s[1] = "C#";
Console.WriteLine(s[1]); // C#Indexer tidak terbatas pada bilangan bulat. Kamu dapat menggunakan tipe apa pun sebagai parameter indeks, sehingga berguna untuk akses seperti dictionary:
public string this[string key]
{
get { return dictionary[key]; }
set { dictionary[key] = value; }
}Seperti property, indexer bisa bersifat hanya-baca (hilangkan setter) atau menyertakan logika validasi dalam accessor-nya. Indexer cocok digunakan saat class-mu membungkus collection atau saat notasi tanda kurung siku membuat kodemu lebih mudah dibaca.
Tantangan
MudahMari buat class Playlist yang memungkinkan kamu mengakses lagu menggunakan notasi kurung siku yang intuitif, seperti saat bekerja dengan array. Kamu akan membuat playlist musik yang lagunya dapat diambil dan diperbarui berdasarkan posisinya menggunakan indexer.
Kamu akan mengatur kodemu dalam dua file:
Playlist.cs: Buat classPlaylistdalam namespaceMusicyang membungkus koleksi lagu internal dan menyediakan akses seperti array melalui indexer. Playlist-mu harus memiliki:- array string privat untuk menyimpan judul lagu
- constructor yang menerima string berisi judul lagu yang dipisahkan koma, lalu memisahkannya ke dalam array internal
- indexer yang menggunakan
this[int index]dan memungkinkan kamu mengambil serta mengatur lagu pada posisi tertentu - property hanya-baca
Countyang mengembalikan jumlah lagu dalam playlist - method
GetAllSongs()yang mengembalikan semua lagu yang digabungkan dengan" | "
Program.cs: Di file utama, buat playlist dari input, lalu gunakan indexer untuk mengakses dan mengubah lagu. Tunjukkan cara membaca lagu berdasarkan indeks dan memperbarui lagu pada posisi tertentu.
Kamu akan menerima tiga input:
- Daftar judul lagu yang dipisahkan koma (misalnya,
Song A,Song B,Song C) - Indeks yang akan diambil (integer)
- Judul lagu baru untuk menggantikan lagu pada indeks yang sama
Cetak output dengan format ini:
Total songs: {Count}
Song at index {index}: {song title}
After update: {GetAllSongs()}Misalnya, jika inputnya adalah Rock Anthem,Jazz Vibes,Pop Hit, 1, dan Blues Classic, outputnya akan menjadi:
Total songs: 3
Song at index 1: Jazz Vibes
After update: Rock Anthem | Blues Classic | Pop HitPerhatikan bahwa indexer memungkinkan kamu mengakses playlist[1] untuk mendapatkan "Jazz Vibes", lalu menetapkan playlist[1] = "Blues Classic" untuk memperbaruinya. Cara ini jauh lebih alami daripada memanggil method seperti GetSongAt(1) atau SetSongAt(1, "Blues Classic")!
Coba sendiri
using System;
using Music;
class Program
{
public static void Main(string[] args)
{
// Baca input
string songList = Console.ReadLine();
int index = Convert.ToInt32(Console.ReadLine());
string newSong = Console.ReadLine();
// TODO: Buat object Playlist dari songList
// TODO: Cetak jumlah total lagu menggunakan property Count
// TODO: Cetak lagu pada indeks yang diberikan menggunakan indexer
// TODO: Perbarui lagu pada indeks yang diberikan menggunakan indexer
// TODO: Cetak semua lagu setelah diperbarui menggunakan GetAllSongs()
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola CompositeLatihan sendiri: Compiler C# online