Rumah > pembangunan bahagian belakang > C++ > Mengapakah Sintaks Kumpulan Kaedah Menyebabkan Ralat 'Invokasi Ambiguous' dengan Perwakilan Terlebih Sarat (Tindakan lwn. Fungsi)?

Mengapakah Sintaks Kumpulan Kaedah Menyebabkan Ralat 'Invokasi Ambiguous' dengan Perwakilan Terlebih Sarat (Tindakan lwn. Fungsi)?

DDD
Lepaskan: 2025-01-13 10:09:43
asal
942 orang telah melayarinya

Why Does Method Group Syntax Cause

Sintaks Kumpulan Kaedah dan Seruan Samar-samar dengan Lebihan Perwakilan

Menggunakan sintaks kumpulan kaedah dan bukannya ungkapan lambda boleh membawa kepada kekaburan apabila berurusan dengan kaedah terlebih beban menerima Action atau Func<string> perwakilan. Walaupun ungkapan lambda berfungsi dengan lancar, kumpulan kaedah mencetuskan ralat "Ambiguous invocation".

Keperluan untuk Casting Eksplisit: Memahami Peraturan Penukaran

Punca utama terletak pada kumpulan kaedah C# untuk mewakilkan peraturan penukaran. Kumpulan kaedah secara tersirat menukar kepada jenis perwakilan serasi, bermakna jenis parameter dan pengubah suai mesti sepadan. Yang penting, jenis pulangan tidak dipertimbangkan semasa penukaran tersirat ini.

Semasa resolusi beban lampau, pengkompil mencari kaedah yang berkenaan. Kaedah boleh digunakan jika parameternya boleh ditukar secara tersirat daripada argumen yang disediakan. Dalam senario ini, classWithSimpleMethods.GetString() terpakai kepada kedua-dua Func<string> dan Action kerana senarai parameter kosong. Pengkompil tidak boleh memilih antara penukaran yang sama sah ini, oleh itu ralat kekaburan. Menghantar kumpulan kaedah secara eksplisit ke sama ada Action atau Func<string> menyelesaikan masalah ini.

C# 7.3 dan Seterusnya: Penyelesaian Sarat Lebih Baik

Seperti yang dinyatakan oleh Jon Skeet, C# 7.3 memperkenalkan penambahbaikan pada resolusi beban yang berlebihan, mengurangkan kekaburan ini. Dalam banyak keadaan, penghantaran eksplisit tidak lagi diperlukan dengan C# 7.3 dan versi yang lebih baru.

Atas ialah kandungan terperinci Mengapakah Sintaks Kumpulan Kaedah Menyebabkan Ralat 'Invokasi Ambiguous' dengan Perwakilan Terlebih Sarat (Tindakan lwn. Fungsi)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan