operator delegasi

Operator delegate membuat metode anonim yang dapat dikonversi ke jenis delegasi. Metode anonim dapat dikonversi ke jenis seperti System.Action dan System.Func<TResult> jenis yang digunakan sebagai argumen ke banyak metode.

Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4));  // output: 7

Catatan

Ekspresi Lambda memberikan cara yang lebih ringkas dan ekspresif untuk membuat fungsi anonim. Gunakan => operatoruntuk membuat ekspresi lambda:

Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4));  // output: 7

Untuk informasi selengkapnya tentang fitur ekspresi lambda, misalnya, menangkap variabel luar, lihat ekspresi Lambda.

Saat menggunakan operator delegate, Anda mungkin menghilangkan daftar parameter. Jika Anda melakukannya, metode anonim yang dibuat dapat dikonversi ke jenis delegasi dengan daftar parameter apa pun, seperti yang ditunjukkan contoh berikut:

Action greet = delegate { Console.WriteLine("Hello!"); };
greet();

Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);

// Output:
// Hello!
// This is world!

Itulah satu-satunya fungsionalitas metode anonim yang tidak didukung oleh ekspresi lambda. Dalam semua kasus lain, ekspresi lambda adalah cara yang lebih disukai untuk menulis kode sebaris. Anda dapat menggunakan buang untuk menentukan dua parameter input atau lebih dari metode anonim yang tidak digunakan oleh metode :

Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

Untuk kompatibilitas mundur, jika hanya satu parameter yang diberi nama _, _ diperlakukan sebagai nama parameter tersebut dalam metode anonim.

Anda dapat menggunakan pengubah static pada deklarasi metode anonim:

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

Metode anonim statik tidak dapat menangkap variabel lokal atau status instans dari penutupan cakupan.

Anda juga menggunakan kata kunci delegate untuk mendeklarasikan jenis delegasi.

Dimulai dengan C# 11, kompilator dapat menyimpan cache objek delegasi yang dibuat dari grup metode. Pertimbangkan kode berikut:

static void StaticFunction() { }

Saat Anda menetapkan grup metode ke delegasi, kompilator akan menyimpan cache delegasi:

Action a = StaticFunction;

Sebelum C# 11, Anda harus menggunakan ekspresi lambda untuk menggunakan kembali satu objek delegasi:

Action a = () => StaticFunction();

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian Ekspresi fungsi anonim dari spesifikasi bahasa pemrogram C#.

Lihat juga