Un bel post di David Hayden dove spiega il modo migliore per usare il constraint new() per le classi generiche:
Using the new and class keywords with .NET Generics
Il motivo per usare anche il constraint class insieme a new(), e' dovuto al fatto che senza il class, il compilatore non sa se il tipo generico e' un value type o un reference type e quindi deve fare un controllo su tutti e due. Mentre con il constraint class specificato, sappiamo che il tipo deve essere per forza un reference type.
Nel post di David e' mostrato il codice IL per tutti e due i casi (con e senza class) e si puo vedere come il codice generato on class sia molto piu' corto e ottimizzato.