¿Por qué .NET crea subcadenas nuevas en lugar de apuntar a cadenas existentes?

De una breve mirada usando Reflector, parece queString.Substring() Asigna memoria para cada subcadena. ¿Estoy en lo cierto que este es el caso? Pensé que no sería necesario ya que las cuerdas son inmutables.

Mi objetivo subyacente era crear unIEnumerable<string> Split(this String, Char) Método de extensión que no asigna memoria adicional.

Respuestas a la pregunta(5)

Su respuesta a la pregunta