Compilador de C # característica o estoy perdiendo mi mente?
-
29-09-2019 - |
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?
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.