Perché String è stato progettato come tipo di riferimento anziché come tipo di valore?C'è qualche altro motivo oltre alle prestazioni e alla leggibilità del motivo per cui System.String è un tipo di riferimento anziché di tipo valore?
Dal punto di vista della modellazione, l'avrei modellato come un tipo di valore poiché rappresenta qualcosa senza identità. Non ha attributi distintivi. (Ad esempio, non posso fare alcuna differenza tra una stringa "a" e un'altra stringa "a")
So che avrei avuto seri problemi di prestazioni con lunghe stringhe memorizzate nello stack. Probabilmente è impossibile, poiché le stringhe diventano molto lunghe, perché lo stack è di dimensioni limitate.
Se non fosse per le prestazioni perché si progetta System.String come un tipo di riferimento? (Si supponga qualsiasi stringa possibile è al massimo 16 byte di lunghezza)
Immagino di aver già visto la risposta per il potenziale duplicato http://stackoverflow.com/questions/636932/in-c-why-is-string-a-reference-type-that-behaves-like-a -valore-tipo. Tuttavia, non sono sicuro del tipo di risposta che stai cercando: se stai parlando di .NET framework engineering, il motivo principale (dato nell'altro thread) è che le stringhe possono avere qualsiasi dimensione e potrebbero facilmente riempire l'1 MB stack - non solo porta a problemi di prestazioni, ma interrompe apertamente il framework. Hai bisogno di un motivo migliore del "non avere una struttura infranta"? –
Sto cercando una risposta dal punto di vista della modellazione. (Ad esempio una risposta del tipo: la modellerei come un tipo di riferimento anche se non fosse per le prestazioni e lo stack perché ...) –
Ma l'unica ragione per cui esistono anche i tipi di valore è a causa delle prestazioni. Se qualcuno modellasse un puro linguaggio OOP (come SmallTalk), allora * mai * renderebbe i tipi di comportamento differenti in modo così drammatico. E una stringa e un int sarebbero entrambi oggetti. E sii lento come melassa, come SmallTalk. –