Pregunta

Después de volver a escribir mi función de eventos invocación para manejar los eventos y sus argumentos de forma genérica, empecé a ir por encima de mi código (para que coincida con el cambio), y me di cuenta que el compilador implícitamente hizo la llamada genérica.

Esta es mi función:

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

y aquí está la línea para llamar a la función:

InvokeEvent(AfterInteraction, result);

Esto compila sin ningún problema, y ??el intellisense incluso en pantalla la llamada "correcta" (con la pieza).

¿Es esta una característica del compilador (del tipo genérico puede, en realidad, se infiere directamente desde el segundo argumento), o me estoy volviendo loco por nada y no viene al caso?

¿Fue útil?

Solución

Si el compilador puede deducir todos los parámetros de tipo, entonces no es necesario especificar explícitamente. En este caso se puede inferir TArgs desde el segundo parámetro.

Pero si no puede inferir todos parámetros de tipo, es necesario especificar todos ellos, incluso los que el compilador podría inferir.

Otros consejos

Es el tipo de llamada inferencia, leer sobre él aquí , búsqueda para el capítulo "Inferencia"

Como se ha dicho que el compilador ha inferido tipo desde el segundo argumento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top