Domanda

Dopo aver riscritto la mia funzione di evento invocazione per gestire gli eventi e le loro argomentazioni genericamente, ho iniziato ad andare oltre il mio codice (per abbinare il cambiamento), e ho notato che il compilatore implicitamente ha effettuato la chiamata generica.

Ecco la mia funzione:

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

e qui è la linea per chiamare la funzione:

InvokeEvent(AfterInteraction, result);

Questa compila senza un problema, e l'intellisense anche visualizzare la chiamata "corretta" (con la parte).

Si tratta di una caratteristica del compilatore (il tipo generico può, in realtà, essere dedotto direttamente dal secondo argomento), o sto impazzendo per nulla e manca il punto?

È stato utile?

Soluzione

Se il compilatore può dedurre tutti i parametri di tipo, allora non c'è bisogno di specificare in modo esplicito. In questo caso si può dedurre TArgs dal secondo parametro.

Ma se non può inferire tutti parametri di tipo, è necessario specificare tutti loro, anche quelli il compilatore potrebbe dedurre.

Altri suggerimenti

E 'il tipo di chiamata deduzione, leggere su di esso qui , ricerca per il capitolo "inferenza di tipo"

Come avete detto che il compilatore ha dedotto tipo dal secondo argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top