C # Функция компилятора Или я продолжаю разум?

StackOverflow https://stackoverflow.com/questions/4104370

  •  29-09-2019
  •  | 
  •  

Вопрос

После переписания функции вызова моего события для общего обрабатывания событий и их аргументов я начал переходить по моим коде (соответствовать изменению), и я заметил, что компилятор неявно сделан генерическим вызовом.

Вот моя функция:

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 даже отображает «правильный» вызов (со стороны).

Является ли эта функция компилятора (универсальный тип может быть непосредственно выведен из второго аргумента), либо я схожу с ума без ума и не пропускаю точку?

Это было полезно?

Решение

Если компилятор может вывести все параметры типа, вам не нужно указывать их явно. В этом случае это может сделать вывод TArgs со второго параметра.

Но если это не может сделать вывод все Введите параметры, вам необходимо указать все, даже те, которые могут сделать компилятор.

Другие советы

Это вывод типа вызова, прочитал об этом здесь, Поиск главы «Тип вывода»

Как вы уже говорили, компилятор имеет выборочный тип из второго аргумента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top