2

イベントとその引数を一般的に処理するようにイベント呼び出し関数を書き直した後、(変更に一致するように)コードを調べ始めたところ、コンパイラーが暗黙的に一般的な呼び出しを行っていることに気付きました。

これが私の関数です:

private void InvokeEvent<TArgs>(EventHandler<TArgs> invokedevent, TArgs args) 
    where TArgs : EventArgs
    {
        EventHandler<TArgs> temp = invokedevent;
        if (temp != null)
        {
            temp(this, args);
        }
    }

関数を呼び出す行は次のとおりです。

InvokeEvent(AfterInteraction, result);

これは問題なくコンパイルされ、インテリセンスは「正しい」呼び出し(パーツを含む)を表示します。

これはコンパイラの機能ですか(ジェネリック型は実際には2番目の引数から直接推測できます)、それとも私は何にも夢中になってポイントを逃していますか?

4

3 に答える 3

6

コンパイラがすべての型パラメータを推測できる場合は、それらを明示的に指定する必要はありません。この場合TArgs、2番目のパラメーターから推測できます。

ただし、すべての型パラメーターを推測できない場合は、コンパイラーが推測できるものも含めて、すべてを指定する必要があります。

于 2010-11-05T08:31:14.793 に答える
3

これは型推論を呼び出します。ここでそれについて読んで、「型推論」の章を検索してください

于 2010-11-05T08:32:12.807 に答える
2

あなたが言ったように、コンパイラは2番目の引数から型を推測しました。

于 2010-11-05T08:29:58.720 に答える