delegate, Action/Func, kapanışlar
Davranışı delegate'ler aracılığıyla aktarın: özel delegate'ler tanımlayın, yerleşik Action/Func yapılarını kullanın ve lambdaların değişkenleri nasıl yakaladığını (kapanışlar) görün.
delegate, Action/Func, kapanışlar, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 1. 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 3 dersten oluşur.
delegate türlerine genel bakış
Amaç: Yöntemleri veri olarak ele almak.
- Bir delegate türü tanımlayın.
- Action/Func kullanın.
- lambda ifadeleri oluşturun.
- kapanışları (yakalanan değişkenleri) anlayın.
Özel delegate temelleri
Bir delegate, tür güvenli bir işlev göstergesidir. Uyumlu yöntemleri atayın ve bir işlev gibi çağırın.
using System;
// Custom delegate type: a method taking two ints and returning int
public delegate int Op(int x, int y);
public class Program
{
static int Add(int a, int b) { return a + b; }
static int Mul(int a, int b) { return a * b; }
public static void Main(string[] args)
{
Op f = Add; // method group conversion
Console.WriteLine(f(2, 3)); // 5
f = Mul;
Console.WriteLine(f(2, 3)); // 6
}
}
Action ve Func
Action, void döndüren yöntemleri temsil eder; Func ise bir değer döndürür. Yöntem gruplarını veya lambda ifadelerini kullanın.
using System;
public class Program
{
static void Log(string s) { Console.WriteLine("LOG: " + s); }
public static void Main(string[] args)
{
Action<string> a = Log; // no return
a("hello");
Func<int, int, int> sum = delegate(int x, int y) { return x + y; }; // lambda/anon method
Console.WriteLine(sum(3, 4)); // 7
// Method group to Func
Func<string, int> len = GetLen;
Console.WriteLine(len("abc")); // 3
}
static int GetLen(string s) { return s == null ? 0 : s.Length; }
}
Kapanış gösterimi
Bir kapanış, dış kapsamdan değişkenleri yakalar. Değişken, delegate'i oluşturan yöntemden daha uzun süre yaşar.
using System;
public class Program
{
public static void Main(string[] args)
{
int counter = 0; // captured variable (lives as long as delegate)
Action inc = delegate() { counter = counter + 1; Console.WriteLine(counter); };
inc(); // 1
inc(); // 2
Console.WriteLine("Final=" + counter); // 2
}
}
Üst düzey yöntem
Davranışı özelleştirmek için bir Func veya Action geçirin. Bu, birçok API'nin (ve LINQ'in) temelini oluşturur.
using System;
public class Program
{
// Apply a transform to each number and sum the results
static int SumBy(int[] xs, Func<int, int> transform)
{
int total = 0;
for (int i = 0; i < xs.Length; i++)
{
total += transform(xs[i]);
}
return total;
}
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3 };
int sumSquares = SumBy(data, delegate(int x) { return x * x; });
Console.WriteLine(sumSquares); // 14
}
}
delegate ipuçları
İpuçları:
- Ek özel delegate türleri oluşturmamak için Action/Func kullanmayı tercih edin.
- Lambda ifadelerini kısa ve anlaşılır tutun.
- Yakalanan değişkenlere dikkat edin; değerleri daha sonra değişebilir.
- Adlandırılmış bir yöntem imzayla zaten eşleşiyorsa yöntem gruplarını kullanın.
Func ve Action'ın anlamı
Tekrar
Tekrar: delegate türleri tanımlayın, Action/Func kullanın ve küçük lambda ifadeleri yazın. Kapanışlar, lambda ifadelerinin yerel değişkenleri yakalamasını sağlar; bunları dikkatli kullanın.
Yapay zeka eğitmeniyle C# öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 93
- Dersler
- 346
Sıkça Sorulan Sorular
“delegate, Action/Func, kapanışlar” dersi ücretsiz mi?
Evet — “delegate, Action/Func, kapanışlar” 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 3 dersten oluşur.
“delegate, Action/Func, kapanışlar” dersinde ne öğreneceğim?
Davranışı delegate'ler aracılığıyla aktarın: özel delegate'ler tanımlayın, yerleşik Action/Func yapılarını kullanın ve lambdaların değişkenleri nasıl yakaladığını (kapanışlar) görün. 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, 3 dersinin 1. dersidir.
“delegate, Action/Func, kapanışlar” 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
- delegate, Action/Func, kapanışlar
- Olaylar: yayımlama/abone olma, event anahtar sözcüğü
- Olay kalıpları ve tuzaklar (bellek sızıntıları)