Aralıkları Destekleyen Özel Türler
Türlerinize Index ve Range desteği ekleyin.
Aralıkları Destekleyen Özel Türler, 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.
Index ve Range Desteği Sağlamanın İki Yolu
Kendi türlerinize Index ve Range sözdizimini ekleyebilirsiniz. Bunun iki yolu vardır: açık indeksleyiciler sağlamak veya bir Length/Count özelliğiyle birlikte bir Slice yöntemi sağlamak.
Index Alan Açık İndeksleyici
System.Index alan bir indeksleyici eklediğinizde, ^ işleci türünüzde doğrudan çalışır.
using System;
class Deck {
private int[] cards = { 1, 2, 3, 4, 5 };
public int this[Index i] => cards[i];
}
var d = new Deck();
Console.WriteLine(d[^1]); // 5Range Alan Açık İndeksleyici
.. ile dilimlemeyi desteklemek için System.Range alan ve istediğiniz dilim türünü döndüren bir indeksleyici ekleyin.
using System;
class Deck {
private int[] cards = { 1, 2, 3, 4, 5 };
public int[] this[Range r] => cards[r];
}
var d = new Deck();
Console.WriteLine(string.Join(",", d[1..3])); // 2,3Length + Slice Deseni
Türünüzde bir Count veya Length özelliği ile Slice(int start, int length) yöntemi varsa derleyici, aralık desteğini otomatik olarak da oluşturabilir.
Deseni Uygulama
Burada özel bir arabellek Length ve Slice özelliklerini sunar. Derleyici, sizin için buf[1..3] ifadesini buf.Slice(1, 2) ifadesine dönüştürür.
using System;
class Buffer {
private int[] data = { 10, 20, 30, 40 };
public int Length => data.Length;
public int this[int i] => data[i];
public int[] Slice(int start, int length) {
var result = new int[length];
Array.Copy(data, start, result, 0, length);
return result;
}
}
var buf = new Buffer();
Console.WriteLine(string.Join(",", buf[1..3])); // 20,30Length Neden Önemlidir
Length (veya Count) özelliği, derleyicinin türünüzde ^1 gibi sondan sayılan dizinleri çözümlemesini sağlar. Bu özellik olmadan ^ çevrilemez.
using System;
class Buffer {
private int[] data = { 10, 20, 30, 40 };
public int Length => data.Length;
public int this[Index i] => data[i.GetOffset(Length)];
}
var buf = new Buffer();
Console.WriteLine(buf[^1]); // 40Index'i El ile Çözümleme
Bir Index indeksleyicisinin içinde, sondan sayılan olası bir dizini düz bir konuma dönüştürmek için i.GetOffset(Length) çağrısını yapın.
using System;
class Ring {
private string[] items = { "a", "b", "c" };
public int Length => items.Length;
public string this[Index i] {
get {
int offset = i.GetOffset(Length);
return items[offset];
}
}
}
var r = new Ring();
Console.WriteLine(r[^2]); // bRange'i El ile Çözümleme
Bir Range indeksleyicisi için r.GetOffsetAndLength(Length), kopyalanacak başlangıç konumunu ve sayıyı birlikte verir.
using System;
class Ring {
private int[] items = { 1, 2, 3, 4, 5 };
public int Length => items.Length;
public int[] this[Range r] {
get {
var (start, len) = r.GetOffsetAndLength(Length);
var slice = new int[len];
Array.Copy(items, start, slice, 0, len);
return slice;
}
}
}
var r = new Ring();
Console.WriteLine(string.Join(",", r[^3..^1])); // 3,4Count ve Length Arasındaki Fark
Bu desen her iki adı da kabul eder: diziler ve span türleri Length, List<T> ise Count kullanır. Her iki özellik de derleyicinin beklentisini karşılar.
using System;
using System.Collections.Generic;
var list = new List<int> { 1, 2, 3, 4 };
// List<T> has Count, so Index works:
Console.WriteLine(list[^1]); // 4Slice Dönüş Türlerini Tasarlama
Slice yönteminizin diziler gibi bir kopya mı, yoksa span türleri gibi bir görünüm mü döndüreceğine karar verin. Görünümler daha az maliyetlidir ancak değiştirilebilir durumu paylaşır; bu nedenle seçiminizi belgeleyin.
Eksiksiz Bir Özel Tür
Bu Sequence, açık indeksleyiciler ve bir Length özelliği aracılığıyla hem ^ hem de .. işlecini destekler.
using System;
class Sequence {
private int[] data;
public Sequence(int[] d) => data = d;
public int Length => data.Length;
public int this[Index i] => data[i];
public int[] this[Range r] => data[r];
}
var s = new Sequence(new[] { 5, 10, 15, 20 });
Console.WriteLine(s[^1]); // 20
Console.WriteLine(string.Join(",", s[1..^1])); // 10,15Kısa Kontrol
Özel bir türde aralık sözdizimini etkinleştiren unsurları doğrulayın.
Özet
Türlerinize Index/Range desteği eklemenin iki yolunu öğrendiniz.
IndexveRangealan açık indeksleyiciler.- Örtük desen: bir
Count/Lengthözelliği ileSlice(int, int)yöntemi. GetOffset(Length)veGetOffsetAndLength(Length), sondan sayılan konumları çözümler.
Sıkça Sorulan Sorular
“Aralıkları Destekleyen Özel Türler” dersi ücretsiz mi?
Evet — “Aralıkları Destekleyen Özel Türler” 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.
“Aralıkları Destekleyen Özel Türler” dersinde ne öğreneceğim?
Türlerinize Index ve Range desteği ekleyin. 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.
“Aralıkları Destekleyen Özel Türler” 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.
Bu kursun tüm dersleri
- Index Türü ve ^ İşleci
- Range Türü ve .. İşleci
- Diziler ve Dizelerle Aralıklar
- Aralıkları Destekleyen Özel Türler