После переписывания моей функции вызова событий для общей обработки событий и их аргументов, я начал просматривать свой код (чтобы соответствовать изменению) и заметил, что компилятор неявно сделал общий вызов.
Вот моя функция:
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);
Это компилируется без проблем, а в intellisense даже отображается "правильный" вызов (вместе с деталью).
Является ли это функцией компилятора (универсальный тип может быть непосредственно выведен из второго аргумента) или я схожу с ума по пустякам и упускаю суть?