In generici C #, possiamo dichiarare un vincolo per un parametro di tipo Tcon un costruttore predefinito, dicendo where T : new(). Tuttavia, nessun altro tipo di vincoli come questo è valido, new(string)ad esempio ecc.
Dal punto di vista della progettazione linguistica e / o dell'implementazione, qual è la ragione?
C'è qualcosa nel modo in cui funzionano i costruttori o nel modo in cui viene implementato il sistema di tipi che lo proibisce (o almeno lo rende più difficile)? Se è così, che cosa è? Ricordo di aver letto da qualche parte che in default(T)realtà si compila new T()per T : struct. È legato a questo, forse?
O è semplicemente una decisione di progettazione presa per evitare di rendere il linguaggio troppo complicato?
new(string)non è un vincolo del costruttore predefinito. La tua domanda equivale a dire "Perché non ci sono vincoli che richiedono firme del costruttore specifiche?" Molto probabilmente perché un tale vincolo non sarebbe particolarmente utile.