delegate, Action/Func, penutupan
Salurkan tingkah laku melalui delegate: isytiharkan delegate tersuai, gunakan Action/Func terbina dalam, dan lihat cara lambda menangkap pemboleh ubah (penutupan).
delegate, Action/Func, penutupan ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Gambaran keseluruhan delegat
Matlamat: Anggap kaedah sebagai data.
- Tentukan jenis delegate
- Gunakan Action/Func
- Cipta fungsi lambda
- Fahami penutupan (pemboleh ubah yang ditangkap)
Asas delegate tersuai
Satu delegate ialah penuding fungsi yang selamat dari segi jenis. Tetapkan kaedah yang serasi dan panggilnya 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 mewakili kaedah yang memulangkan void; Func memulangkan nilai. Gunakan kumpulan kaedah atau fungsi 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
Satu penutupan menangkap pemboleh ubah daripada skop luar. Pemboleh ubah itu terus wujud selepas kaedah yang mencipta delegate 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
}
}
Kaedah tertib tinggi
Hantar Func atau Action untuk menyesuaikan tingkah laku. Inilah asas bagi banyak API (dan 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
}
}
Petua delegate
Petua:
- Utamakan Action/Func untuk mengelakkan jenis delegate tersuai tambahan.
- Pastikan fungsi lambda pendek dan jelas.
- Berhati-hati dengan pemboleh ubah yang ditangkap; nilainya boleh berubah kemudian.
- Gunakan kumpulan kaedah apabila kaedah bernama sedia ada sepadan dengan tandatangan.
Maksud Func berbanding Action
Ringkasan
Ringkasan: Isytiharkan delegate, gunakan Action/Func dan tulis fungsi lambda yang kecil. Penutupan membolehkan lambda menangkap pemboleh ubah tempatan—gunakannya dengan berhati-hati.
Pelajari C# dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 93
- Pelajaran
- 346
Soalan Lazim
Adakah pelajaran “delegate, Action/Func, penutupan” percuma?
Ya — teks penuh “delegate, Action/Func, penutupan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Apakah yang akan saya pelajari dalam “delegate, Action/Func, penutupan”?
Salurkan tingkah laku melalui delegate: isytiharkan delegate tersuai, gunakan Action/Func terbina dalam, dan lihat cara lambda menangkap pemboleh ubah (penutupan). Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 3.
Berapa lamakah pelajaran “delegate, Action/Func, penutupan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?
Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- delegate, Action/Func, penutupan
- Peristiwa: terbitkan/langgan, kata kunci event
- Corak peristiwa, perangkap (kebocoran memori)