In generici C #, possiamo dichiarare un vincolo per un parametro di tipo T
con 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.