ciao,
cricchi ha scritto:
significa che a T assegnano il nome res e danno il valore default?
No, dunque: Max è un metodo
generico e ciò vuol dire che la sua logica può funzionare su oggetti di un tipo arbitrario
T, come per esempio string, int, Persona o altro.
In realtà, nel caso di Max, il tipo non può essere uno qualsiasi, perché è stato definito un vincolo ben preciso: consente solo i tipi che implementano l'interfaccia IComparable e questo include string e int, ma non Persona.
Se osservi il parametro di Max, noterai che è di tipo IEnumerable<T>, cioè accetta un elenco di quei tipi di cui abbiamo appena parlato.
Il programmatore che voglia usare il metodo Max<T>, dovrà quindi:
- Scegliere il tipo che vuole usare al posto di T (es. string)
- Passare al metodo Max un elenco di oggetti del tipo scelto.
Ecco quindi un esempio di invocazione del metodo:
//definisco un array di stringhe. Questo sarà l'"elenco di stringhe" che passerò a Max
string[] elenco = new string[] {"A", "B", "C"};
//passare come argomento un array di stringhe va bene, perché l'array implementa IEnumerable
string risultato = Max<string>(elenco);
Oppure, per brevità posso scrivere:
//posso omettere <string> perché il compilatore è in grado di inferire dall'argomento il tipo che ho scelto
string risultato = Max(elenco);
Per capire meglio il senso del metodo Max, fai finta che al posto di T ci sia scritto string, o comunque qualsiasi tipo che implementi IComparable. T è solo un parametro di tipo, che a runtime verrà sostituito dal tipo concreto scelto dallo sviluppatore.
Il T non è una parola chiave. Potevi usare qualsiasi altro nome con lo stesso criterio con cui scegli il nome di una variabile, ma la
linea guida vuole che i parametri di tipo - per lo meno - inizino con T.
Detto questo, arrivo alla tua domanda:
Quando scrivono
T res= default(T);
Se lo sviluppatore aveva scelto string, puoi leggere quella linea come:
string res = default(string);
Il
default(string) qui serve soltanto ad inizializzare la variabile res con un valore di default che, nel caso di string come degli altri
reference types, è il null.
Il default è necessario perché chi ha scritto il metodo Max consente di usare anche
value types come int, che invece non possono essere inizializzati a null. Il default quindi restituisce un valore opportuno e compatibile con il tipo su cui agisce.
Ecco la documentazione:
http://msdn.microsoft.com/en-us/library/xwth0h0d.aspxciao,
Moreno
Modificato da BrightSoul il 27 settembre 2014 21.16 -