delegate, Action/Func, closure
Teruskan perilaku melalui delegate: deklarasikan delegate khusus, gunakan Action/Func bawaan, dan lihat cara lambda menangkap variabel (closure).
delegate, Action/Func, closure adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.
Ikhtisar delegasi
Tujuan: Perlakukan metode sebagai data.
- Definisikan jenis delegate
- Gunakan Action/Func
- Buat lambda
- Pahami penutupan (variabel yang ditangkap)
Dasar delegasi kustom
delegate adalah penunjuk fungsi yang aman terhadap jenis. Tetapkan metode yang kompatibel dan panggil seperti fungsi.
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 & Func
Action merepresentasikan metode yang mengembalikan void; Func mengembalikan nilai. Gunakan kelompok metode atau lambda.
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; }
}
Demonstrasi penutupan
Penutupan menangkap variabel dari cakupan luar. Variabel tersebut tetap ada setelah metode yang membuat delegasi selesai.
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
}
}
Metode tingkat tinggi
Teruskan Func atau Action untuk menyesuaikan perilaku. Ini menjadi dasar banyak antarmuka pemrograman aplikasi, termasuk LINQ.
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
}
}
Kiat delegasi
Kiat:
- Utamakan Action/Func agar tidak perlu membuat jenis delegasi kustom tambahan.
- Buat lambda tetap singkat dan jelas.
- Perhatikan variabel yang ditangkap; nilainya dapat berubah kemudian.
- Gunakan kelompok metode jika metode bernama sudah cocok dengan tanda tangan tersebut.
Makna Func vs Action
Ringkasan
Ringkasan: Deklarasikan delegasi, gunakan Action/Func, dan tulis lambda kecil. Penutupan memungkinkan lambda menangkap variabel lokal—gunakan dengan hati-hati.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “delegate, Action/Func, closure” gratis?
Ya — teks lengkap “delegate, Action/Func, closure” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “delegate, Action/Func, closure”?
Teruskan perilaku melalui delegate: deklarasikan delegate khusus, gunakan Action/Func bawaan, dan lihat cara lambda menangkap variabel (closure). Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 3.
Berapa lama pelajaran “delegate, Action/Func, closure” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- delegate, Action/Func, closure
- Event: publikasi/berlangganan, kata kunci event
- Pola event, jebakan (kebocoran memori)