Koleksiyon Oluşturucuları
Özel türlerde koleksiyon ifadelerini destekleyin.
Koleksiyon Oluşturucuları, 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.
Koleksiyon İfadelerinde Özel Türler
Koleksiyon ifadeleri yerleşik türlerle sınırlı değildir. [CollectionBuilder] özniteliğiyle kendi türünüz [...] söz dizimi kullanılarak oluşturulabilir.
CollectionBuilder Özniteliği
[CollectionBuilder(typeof(Factory), "Create")] özniteliğini koleksiyon türünüze uygularsınız. Bu öznitelik, derleyicinin örnekleri oluşturmak için çağıracağı statik fabrika yöntemini belirtir.
Oluşturucu Yönteminin İmzası
Oluşturucu yöntemi static olmalı, tek bir ReadOnlySpan<T> parametresi almalı ve koleksiyon türünüzü döndürmelidir. Derleyici öğeleri aralık olarak geçirir.
En Basit Özel Koleksiyon
Burada, bir oluşturucu aracılığıyla koleksiyon ifadesiyle oluşturulmayı destekleyen küçük bir değişmez koleksiyon yer alıyor.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
[CollectionBuilder(typeof(IntBagBuilder), "Create")]
class IntBag : IEnumerable<int> {
private readonly int[] items;
public IntBag(ReadOnlySpan<int> data) => items = data.ToArray();
public IEnumerator<int> GetEnumerator() => ((IEnumerable<int>)items).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}
static class IntBagBuilder {
public static IntBag Create(ReadOnlySpan<int> data) => new IntBag(data);
}
IntBag bag = [1, 2, 3];
foreach (int n in bag) Console.Write(n + " "); // 1 2 3
Console.WriteLine();Neden ReadOnlySpan
Aralık parametresi, derleyicinin öğeleri ara bir ayırma işlemi yapmadan aktarmasına olanak tanır. Oluşturucunuz bunları ihtiyaç duyduğu depolama alanına kopyalar.
IEnumerable Uygulamalı Olmalı
Koleksiyon türü, derleyicinin öğe türünü bilmesi ve kullanımı doğrulayabilmesi için IEnumerable<T> arayüzünü uygulamalıdır; türün öğe türü aralık türüyle eşleşmelidir.
Genel Oluşturucular
Oluşturucular genel olabilir ve MyCollection<T> desteği sağlayabilir. Oluşturucu yöntemi ReadOnlySpan<T> alır ve MyCollection<T> döndürür.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
[CollectionBuilder(typeof(BoxBuilder), "Create")]
class Box<T> : IEnumerable<T> {
private readonly T[] items;
public Box(ReadOnlySpan<T> d) => items = d.ToArray();
public IEnumerator<T> GetEnumerator() => ((IEnumerable<T>)items).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}
static class BoxBuilder {
public static Box<T> Create<T>(ReadOnlySpan<T> d) => new Box<T>(d);
}
Box<string> b = ["x", "y"];
foreach (var s in b) Console.Write(s + " "); // x y
Console.WriteLine();Değişmez Koleksiyonların Avantajı
.NET'in değişmez koleksiyonları, örneğin ImmutableArray<T>, koleksiyon ifadelerini oluşturucular sayesinde destekler. Oluşturucu, aralıktan donmuş örneği oluşturur.
using System;
using System.Collections.Immutable;
ImmutableArray<int> nums = [1, 2, 3];
Console.WriteLine(nums.Length); // 3Yayma Öğeleri de Çalışır
Bir türde oluşturucu bulunduğunda, koleksiyon ifadelerinin içinde yayma öğeleri de otomatik olarak çalışır; çünkü derleyici hâlâ tek bir öğe aralığı oluşturur.
using System;
using System.Collections.Immutable;
ImmutableArray<int> a = [1, 2];
ImmutableArray<int> all = [..a, 3, 4];
Console.WriteLine(all.Length); // 4Oluşturucu Ne Zaman Eklenmeli
Özel bir koleksiyon sunuyor ve çağıranların kısa [...] söz diziminden yararlanmasını istiyorsanız, özellikle değişmez veya özel amaçlı kapsayıcılar için bir [CollectionBuilder] ekleyin.
Hepsini Bir Araya Getirme
Bir oluşturucu yalnızca üç parçadan oluşur: öznitelik, IEnumerable<T> türü ve statik bir Create(ReadOnlySpan<T>) yöntemi. Bunlarla türünüz birinci sınıf bir koleksiyon ifadesi hedefi hâline gelir.
Hızlı Sınama
Bir koleksiyon oluşturucusunun gereksinimlerini doğrulayın.
Özet
Özel türlerin koleksiyon ifadelerini nasıl desteklediğini öğrendiniz.
[CollectionBuilder(typeof(Factory), "Create")]özniteliğini türe uygulayın.- Fabrika,
ReadOnlySpan<T>alan birstaticyöntemdir. - Tür,
IEnumerable<T>uygulamalıdır. ImmutableArray<T>türünün[...]kabul etmesini sağlayan yöntem budur.
Sıkça Sorulan Sorular
“Koleksiyon Oluşturucuları” dersi ücretsiz mi?
Evet — “Koleksiyon Oluşturucuları” 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.
“Koleksiyon Oluşturucuları” dersinde ne öğreneceğim?
Özel türlerde koleksiyon ifadelerini destekleyin. 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.
“Koleksiyon Oluşturucuları” 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
- Koleksiyon İfadesi Söz Dizimi
- Yayma Öğesi
- Koleksiyonlarda Hedef Türü Belirleme
- Koleksiyon Oluşturucuları