2013-07-26 20 views
22

Questa potrebbe sembrare una domanda stupida, ma è solo per curiosità.Delegati vs Azione, Fun in C#

Abbiamo due particolari delegati già definite in C#:

azione incapsula qualsiasi metodo "vuoto" che prende 0 o più parametri.
Func incapsula qualsiasi metodo che restituisce un tipo di valore specifico e accetta 0 o più parametri.

La mia domanda è: in quali casi è consigliabile definire un delegato personalizzato?
Perché dovresti farlo?

Grazie in anticipo

+0

I delegati erano presenti prima di Func e Action e in molti modi fungono da dispositivi di compatibilità con le versioni precedenti. Tuttavia, ci sono casi in cui non puoi muoverti ma creare il tuo delegato. –

+1

Guarda questo http://www.youtube.com/watch?v=8o0O-vBS8W0 Potrebbe essere utile. – RahulD

risposta

38

Nessuno dei Func o Action tipi consentire out o ref parametri, in modo da dovrete definire i propri delegati, se avete bisogno di usare quelle ad esempio:

public delegate bool TryParse<T>(string s, out T value); 
+1

Sì, è piuttosto logico. Non so se questa fosse la tua intenzione, ma mi hai appena fatto capire che Action e Func non permettono neanche i parametri di tipo.
Grazie mille! – anfri

+0

Hai due tipi di reso nel tuo delegato. Penso che intendessi: delegato pubblico ** bool ** TryParse (string s, out T value); Vorrei poterlo modificare, ma la regola dei 6 caratteri è ancora valida. – user886079

+0

@ user886079 - Sì, intendevo "bool", grazie. – Lee

2

In in migliaia di casi è necessario fare riferimento/puntare a una funzione (quindi un delegato, se l'effettiva implementazione della funzione varierà in fase di esecuzione, ad eccezione della firma) che non corrisponde a nessuno dei delegati specificati. Dì

delegato pubblico T MyDel (T t, U u, V v);

+0

Hai assolutamente ragione. Grazie uomo! – anfri