Mi chiedo se abbia senso avere entrambi i vincoli "classe" e "nuovo()" quando si definisce una classe generica. Come nell'esempio seguente:È inutile avere entrambi i vincoli "class" e "new()" in una classe generica?
class MyParanoidClass<T> where T : class, new()
{
//content
}
Entrambi i vincoli specificano che T deve essere un tipo di riferimento. Mentre il vincolo "classe" non implica che esista un costruttore implicito, il vincolo "nuovo()" richiede una "classe" con una definizione di costruttore pubblico aggiuntiva.
La mia domanda finale (formulazione per) è: ho qualche vantaggio nel definire una classe generica come nell'istruzione precedente, oppure "nuovo()" incapsula entrambi i vincoli?
Non penso che 'new()' imponga un tipo di riferimento, solo un costruttore pubblico senza parametri, che i tipi di valori possono avere (ma penso che abbiano tutti questo comunque per essere tipi di valore quindi è quasi inutile). –
@AdamHouldsworth: I tipi di valore * sempre * hanno un costruttore pubblico senza parametri. E non è inutile, perché il vincolo 'new()' consente al codice all'interno della classe di creare una nuova istanza di 'T' tramite' new T() '. Questo non è possibile se il vincolo è omesso. –
@DanielHilgarth Sì, continuerò a dirlo, ma abbastanza equo sul pezzo inutile. Tuttavia, probabilmente sarà lo stesso di "default (T)". –