0Pricing
C# Academy · Ders

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); // 3

Yayma Öğ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); // 4

Oluş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 bir static yö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

  1. Koleksiyon İfadesi Söz Dizimi
  2. Yayma Öğesi
  3. Koleksiyonlarda Hedef Türü Belirleme
  4. Koleksiyon Oluşturucuları
← C# Academy Sayfasına Dön