首頁 >後端開發 >C++ >為什麼方法組語法會導致重載委託(Action 與 Func)出現「不明確的呼叫」錯誤?

為什麼方法組語法會導致重載委託(Action 與 Func)出現「不明確的呼叫」錯誤?

DDD
DDD原創
2025-01-13 10:09:43942瀏覽

Why Does Method Group Syntax Cause

方法組語法和帶有委託重載的不明確呼叫

在處理接受 ActionFunc<string> 委託的重載方法時,使用方法組語法而不是 lambda 表達式可能會導致歧義。 雖然 lambda 表達式無縫工作,但方法組會觸發「不明確的呼叫」錯誤。

明確轉換的必要性:了解轉換規則

根本原因在於C#的方法組委託轉換規則。 方法組隱式轉換為相容委託類型,這表示參數類型和修飾符必須匹配。 至關重要的是,在此隱式轉換期間不考慮返回類型

在重載決策期間,編譯器會搜尋適用的方法。如果方法的參數可以從提供的參數隱式轉換,則該方法是適用的。 在此場景中,classWithSimpleMethods.GetString() 適用於 Func<string>Action,因為參數清單為空。 編譯器無法在這些同樣有效的轉換之間進行選擇,因此會出現歧義錯誤。 將方法組明確轉換為 ActionFunc<string> 可以解決此問題。

C# 7.3 及更高版本:改良的重載解析度

正如 Jon Skeet 所指出的,C# 7.3 引入了重載解析的增強功能,減輕了這種歧義。 在許多情況下,C# 7.3 及更高版本不再需要明確轉換。

以上是為什麼方法組語法會導致重載委託(Action 與 Func)出現「不明確的呼叫」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn