Bagikan melalui


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

Nota

Ekspresi Lambda memberikan cara yang lebih ringkas dan ekspresif untuk membuat fungsi anonim. Gunakan operator => untuk 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 delegate operator, 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 bernama _, _ 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 statis tidak dapat menangkap variabel lokal atau status instans dari cakupan penutup.

Anda juga menggunakan delegate kata kunci untuk mendeklarasikan jenis delegasi.

Pengkompilasi dapat menyimpan cache objek delegasi yang dibuat dari grup metode. Pertimbangkan metode berikut:

static void StaticFunction() { }

Saat Anda menetapkan grup metode ke delegasi, pengkompilasi menyimpan cache delegasi:

Action a = StaticFunction;

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian ekspresi fungsi Anonim dari spesifikasi bahasa C#.

Lihat juga