Rumah >pembangunan bahagian belakang >C++ >Mengapakah Penyelesaian Lebihan Kumpulan Kaedah Gagal dengan Ralat Invocation Ambiguous dalam C#?

Mengapakah Penyelesaian Lebihan Kumpulan Kaedah Gagal dengan Ralat Invocation Ambiguous dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-13 08:07:42392semak imbas

Why Does Method Group Overload Resolution Fail with Ambiguous Invocation Errors in C#?

Kaedah C# Kekaburan Penyelesaian Lebihan Muatan Kumpulan

Isunya:

Menggunakan sintaks kumpulan kaedah dengan kaedah perwakilan yang terlebih muatan dalam C# boleh mencetuskan ralat pengkompil "Ambiguous invocation", walaupun kaedah tanpa nama berjaya memanggil lebihan beban yang sama.

Mengapa ia Berlaku:

Pengkompil C# tidak mempunyai peraturan "lebih baik" yang pasti apabila menukar kumpulan kaedah kepada berbilang jenis perwakilan yang serasi semasa resolusi beban lampau. Contohnya, jika classWithSimpleMethods.GetString boleh ditukar kepada kedua-dua Func<string> dan Action, pengkompil tidak boleh memilih antara keduanya, yang membawa kepada kekaburan.

Penyelesaian (Pemutus Jenis Eksplisit):

Penyelesaian adalah untuk menghantar kumpulan kaedah secara eksplisit ke jenis perwakilan yang diingini:

<code class="language-csharp">classWithDelegateMethods.Method((Func<string>)classWithSimpleMethods.GetString);</code>

C# 7.3 Penambahbaikan:

C# 7.3 mempertingkatkan resolusi beban lampau untuk kumpulan kaedah. Dalam banyak kes (seperti contoh yang diberikan), classWithDelegateMethods.Method(classWithSimpleMethods.GetString) dan panggilan serupa kini disusun tanpa penghantaran yang jelas. Walau bagaimanapun, kekaburan masih boleh timbul dalam senario yang kompleks.

Atas ialah kandungan terperinci Mengapakah Penyelesaian Lebihan Kumpulan Kaedah Gagal dengan Ralat Invocation Ambiguous dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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