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!