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);

这编译没有问题,智能感知甚至显示“正确”调用(带有部分)。

这是一个编译器特性(泛型类型实际上可以直接从第二个参数推断出来),还是我会因为什么都没有而发疯而错过重点?

4

3 回答 3

6

如果编译器可以推断所有类型参数,那么您不需要显式指定它们。TArgs在这种情况下,它可以从第二个参数推断。

但如果它不能推断出所有类型参数,则需要指定所有类型参数,即使是编译器可以推断出的那些。

于 2010-11-05T08:31:14.793 回答
3

它是调用类型推断,在这里阅读它,搜索“类型推断”一章

于 2010-11-05T08:32:12.807 回答
2

正如您所说,编译器已从第二个参数推断出类型。

于 2010-11-05T08:29:58.720 回答