ホームページ >バックエンド開発 >C++ >C# であいまいな呼び出しエラーが発生し、メソッド グループのオーバーロード解決が失敗するのはなぜですか?

C# であいまいな呼び出しエラーが発生し、メソッド グループのオーバーロード解決が失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-13 08:07:42392ブラウズ

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

C# メソッド グループのオーバーロード解決の曖昧さ

問題:

C# でオーバーロードされたデリゲート メソッドでメソッド グループ構文を使用すると、匿名メソッドが同じオーバーロードを正常に呼び出す場合でも、「あいまいな呼び出し」コンパイラ エラーが発生する可能性があります。

それが起こる理由:

C# コンパイラには、オーバーロードの解決中にメソッド グループを複数の互換性のあるデリゲート型に変換する際の決定的な「より良い」ルールがありません。 たとえば、classWithSimpleMethods.GetStringFunc<string>Action の両方に変換できる場合、コンパイラーはどちらかを選択できず、あいまいさが生じます。

解決 (明示的な型キャスト):

解決策は、メソッド グループを目的のデリゲート型に明示的にキャストすることです。

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

C# 7.3 の改善:

C# 7.3 では、メソッド グループのオーバーロード解決が強化されました。 多くの場合 (提供された例のように)、classWithDelegateMethods.Method(classWithSimpleMethods.GetString) および同様の呼び出しは明示的なキャストなしでコンパイルされるようになりました。 ただし、複雑なシナリオでは依然としてあいまいさが生じる可能性があります。

以上がC# であいまいな呼び出しエラーが発生し、メソッド グループのオーバーロード解決が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。