2
メソッドの戻り値の型がメソッドを別のメソッドに渡すときに、オーバーロードのあいまいさが発生する可能性があることに驚きました。戻り値の型はシグネチャの一部ではないので、戻り値を変更すると以前は存在していなかった部分があいまいになる可能性があります。しかし、これはvoidとTaskの場合のようです。次のことを考えてみましょう:デリゲートに代入するときの戻り値とシグネチャの難易度 - Func <Task>対アクション
class Signature
{
static public void Overload(Func<Task> countasync)
{
}
static public void Overload(Action count)
{
}
}
void Decrement() { }
Task IncrementAsync() { return Task.CompletedTask; }
void TestSig()
{
Signature.Overload(this.IncrementAsync); // no compile time error
Signature.Overload(this.Decrement); // compile time error: this call is ambiguous
}
は、2番目の呼び出しがあいまいにならないように、まだ最初の呼び出しを可能にしながら、過負荷引数の型を定義する方法はありますか?
あいまいさの原因は、デリゲート型(メソッドシグニチャとは異なります)が戻り型とパラメータ型によって区別されるという事実によると思われます。 これは、たとえば、イベントハンドラの戻り値の型に基づいて異なるイベントタイプを持つことができるという点です。 –