Nei generici C #, possiamo dichiarare un vincolo per un parametro di tipo T
per avere un costruttore predefinito, dicendo where T : new()
. Tuttavia, nessun altro tipo di vincoli come questo è valido - new(string)
per esempio, ecc.
Da una prospettiva di progettazione e / o implementazione del linguaggio, qual è la ragione di questo?
C'è qualcosa nel modo in cui i costruttori funzionano o nel modo in cui il sistema di tipi è implementato che vieta questo (o almeno lo rende più difficile)? Se è così, che cosa è? Ricordo di aver letto da qualche parte che default(T)
in realtà compila a new T()
per T : struct
. È collegato a questo, forse?
O è semplicemente una decisione di progettazione presa per evitare di rendere il linguaggio troppo complicato?