Функция компилятора C # или я схожу с ума? - PullRequest
2 голосов
/ 05 ноября 2010

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 05 ноября 2010

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

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

3 голосов
/ 05 ноября 2010

Это вывод типа вызова, читайте об этом здесь , ищите главу "Вывод типа"

2 голосов
/ 05 ноября 2010

Как вы сказали, компилятор имеет тип вывода из второго аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...