Dizinleyiciler
Nesnelere dizi benzeri söz dizimiyle erişin.
Dizinleyiciler, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Dizinleyici Nedir?
Dizinleyici, bir nesneye dizi gibi [ ] sözdizimiyle erişmenizi sağlar. Dizinleyiciyi this[...] ile tanımlarsınız. Koleksiyon benzeri sınıflar için idealdir.
using System;
class Week
{
private string[] _days = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
public string this[int index] => _days[index];
}
class Program
{
static void Main()
{
var w = new Week();
Console.WriteLine(w[0]);
Console.WriteLine(w[6]);
}
}Dizinleyici Sözdizimi
Dizinleyici bir özelliğe benzer, ancak this kullanır ve köşeli parantez içinde bir parametre listesi alır. get ve isteğe bağlı olarak set erişimcilerine sahiptir.
using System;
class Scores
{
private int[] _data = new int[5];
public int this[int i]
{
get { return _data[i]; }
set { _data[i] = value; }
}
}
class Program
{
static void Main()
{
var s = new Scores();
s[0] = 90;
s[1] = 75;
Console.WriteLine(s[0] + ", " + s[1]);
}
}Dizinleyiciyle Okuma ve Yazma
Hem alıcı hem de ayarlayıcı ile, temel depolamayı sınıf denetlerken öğeleri tıpkı bir dizi gibi atayabilir ve okuyabilirsiniz.
using System;
class Grid
{
private int[] _cells = new int[3];
public int this[int i]
{
get => _cells[i];
set => _cells[i] = value;
}
}
class Program
{
static void Main()
{
var g = new Grid();
for (int i = 0; i < 3; i++) g[i] = i * 10;
Console.WriteLine(g[0] + ", " + g[1] + ", " + g[2]);
}
}Dizinleyicide Doğrulama
Dizinleyici yalnızca koddan oluştuğu için dizini doğrulayabilir ve aralık dışı erişimlerde anlaşılır bir hata fırlatabilirsiniz.
using System;
class SafeList
{
private int[] _data = new int[3];
public int this[int i]
{
get
{
if (i < 0 || i >= _data.Length)
throw new IndexOutOfRangeException("Bad index: " + i);
return _data[i];
}
set { _data[i] = value; }
}
}
class Program
{
static void Main()
{
var list = new SafeList();
list[1] = 42;
Console.WriteLine(list[1]);
}
}Dize Anahtarlı Dizinleyiciler
Dizinleyici parametreleri int ile sınırlı değildir. Bir string anahtarı, sınıfınızı sözlük benzeri bir arama yapısına dönüştürür.
using System;
using System.Collections.Generic;
class Config
{
private Dictionary<string, string> _map = new Dictionary<string, string>();
public string this[string key]
{
get => _map.ContainsKey(key) ? _map[key] : "(none)";
set => _map[key] = value;
}
}
class Program
{
static void Main()
{
var c = new Config();
c["theme"] = "dark";
Console.WriteLine(c["theme"]);
Console.WriteLine(c["missing"]);
}
}Birden Fazla Parametre
Bir dizinleyici birden fazla parametre alabilir; bu, matrix[row, col] biçiminde erişilen matrisler veya iki boyutlu ızgaralar için idealdir.
using System;
class Matrix
{
private int[,] _data = new int[2, 2];
public int this[int row, int col]
{
get => _data[row, col];
set => _data[row, col] = value;
}
}
class Program
{
static void Main()
{
var m = new Matrix();
m[0, 0] = 1;
m[1, 1] = 9;
Console.WriteLine(m[0, 0] + ", " + m[1, 1]);
}
}Salt Okunur Dizinleyiciler
Salt okunur bir dizinleyici için ayarlayıcıyı çıkarın; böylece verileri dışarıdan değiştirilmesine izin vermeden kullanıma sunabilirsiniz.
using System;
class Fibonacci
{
public int this[int n]
{
get
{
int a = 0, bv = 1;
for (int i = 0; i < n; i++)
{
int t = a + bv;
a = bv;
bv = t;
}
return a;
}
}
}
class Program
{
static void Main()
{
var fib = new Fibonacci();
Console.WriteLine(fib[7]);
}
}Dizinleyiciler ve Özellikler
Bir özelliğe adla (obj.Name), dizinleyiciye ise anahtarla (obj[key]) erişilir. Nesne bir koleksiyon gibi davranıyorsa dizinleyici kullanın.
using System;
class Inventory
{
private int[] _stock = new int[4];
public int Total => _stock.Length; // property
public int this[int slot] // indexer
{
get => _stock[slot];
set => _stock[slot] = value;
}
}
class Program
{
static void Main()
{
var inv = new Inventory();
inv[2] = 15;
Console.WriteLine("Slot 2: " + inv[2] + ", Total slots: " + inv.Total);
}
}Aşırı Yüklenmiş Dizinleyiciler
Farklı parametre türlerine sahip birden fazla dizinleyici tanımlayabilirsiniz; derleyici eşleşen dizinleyiciyi seçer.
using System;
using System.Collections.Generic;
class People
{
private List<string> _names = new List<string> { "Ann", "Bob", "Cara" };
public string this[int i] => _names[i];
public int this[string name] => _names.IndexOf(name);
}
class Program
{
static void Main()
{
var p = new People();
Console.WriteLine(p[1]);
Console.WriteLine(p["Cara"]);
}
}Dizinlenmiş Bir Nesne Üzerinde Yineleme
Özel bir koleksiyonda doğal biçimde döngüyle gezinmek için dizinleyiciyi bir öğe sayısı özelliğiyle birleştirin.
using System;
class Ring
{
private int[] _data = { 10, 20, 30 };
public int Count => _data.Length;
public int this[int i] => _data[i % _data.Length];
}
class Program
{
static void Main()
{
var ring = new Ring();
for (int i = 0; i < 5; i++)
Console.Write(ring[i] + " ");
Console.WriteLine();
}
}Hepsini Birleştirme
Dizinleyiciler, sarmalayıcı sınıfların yerleşik koleksiyonlar gibi hissettirmesini ve depolama ayrıntılarını tanıdık köşeli parantez sözdiziminin arkasında gizlemesini sağlar.
using System;
using System.Collections.Generic;
class Phonebook
{
private Dictionary<string, string> _book = new Dictionary<string, string>();
public string this[string name]
{
get => _book.TryGetValue(name, out var num) ? num : "unknown";
set => _book[name] = value;
}
}
class Program
{
static void Main()
{
var pb = new Phonebook();
pb["Alice"] = "555-1234";
Console.WriteLine("Alice: " + pb["Alice"]);
Console.WriteLine("Zed: " + pb["Zed"]);
}
}Kısa Sınama
Dizinleyiciler konusundaki anlayışınızı sınayın.
Özet
Dizinleyici, bir sınıfa dizi benzeri erişim sağlamak için this[...] kullanır. get/set erişimcilerini, her tür parametreyi (int, dize, birden fazla parametre), doğrulamayı, aşırı yüklemeyi ve salt okunur biçimleri destekler. Koleksiyon benzeri sınıflar için dizinleyicileri, farklı nitelikler içinse adlandırılmış özellikleri kullanın.
using System;
class Demo
{
private int[] _v = new int[3];
public int this[int i]
{
get => _v[i];
set => _v[i] = value;
}
}
class Program
{
static void Main()
{
var d = new Demo();
d[0] = 100;
Console.WriteLine(d[0]);
}
}Sıkça Sorulan Sorular
“Dizinleyiciler” dersi ücretsiz mi?
Evet — “Dizinleyiciler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Dizinleyiciler” dersinde ne öğreneceğim?
Nesnelere dizi benzeri söz dizimiyle erişin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Dizinleyiciler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.