que utilizan la reflexión a mirar en los campos internos de System.String y me encontré con tres campos:las partes internas de System.String
m_arrayLength
m_stringLength
m_firstChar
No entiendo cómo funciona esto.
m_arrayLength es la longitud de una cierta matriz. ¿Dónde está esta matriz? Aparentemente no es un campo miembro de la clase de cadena.
m_stringLength tiene sentido. Es la longitud de la cadena.
m_firstChar es el primer personaje de la cadena.
Así que mi pregunta es ¿dónde están el resto de los caracteres de la cadena? ¿Dónde están almacenados los contenidos de la cadena si no están en la clase de cadena?
@Marc, creo que su descripción (sólo el primer bit) es un poco confuso. Si 'm_firstChar' es un' char', entonces su dirección no puede ser la ubicación de una cadena. Si, en cambio, es una dirección del primer carácter en una matriz de 'char's), no tiene sentido usar' & m_firstChar', que le daría la dirección del puntero, ¿no? A menos que C# sea muy diferente de sus hermanos, lo cual es una posibilidad. No sé mucho sobre eso. – paxdiablo
@paxdiablo si miras el código descompilado verás que el primer carácter es el primer carácter real de la cadena en la memoria. Por lo tanto, obtener su dirección e indexación más allá de la dirección de memoria inicial será el resto de los caracteres. – Eilon
¿Entonces m_firstChar es en realidad la matriz (que se degradaría a un puntero en C)? – paxdiablo