Pregunta algo académica, pero: ¿cómo funcionan los tipos de valor como Int en realidad trabajo?¿Cómo funciona realmente un tipo de valor en .net?
He usado Reflector en mscorlib para descubrir cómo se implementa System.Int32, y es solo un Struct que hereda de System.ValueType. Estaba buscando algo entre las líneas de una matriz de bits que contenga el valor, pero solo encontré un campo que se declaró int, lo que significa que es una referencia circular.
Quiero decir, puedo escribir "int i = 14;", pero el número 14 necesita almacenarse en alguna parte de alguna manera, pero no pude encontrar la "Matriz de 32 bits" o un puntero o algo así.
¿Es esto algo mágico que hace el compilador, y estos tipos de magia son parte de la especificación? (Similar a cómo System.Attribute o System.Exception son tipos "especiales")
Edit: Si declaro mi propia estructura, le agrego campos. Esos campos son de tipo incorporado, por ejemplo int. Entonces el CLR sabe que tengo un int. ¿Pero cómo sabe que un int es 32 bits, firmado? ¿Es simplemente que la Especificación especifica ciertos tipos de base y, por lo tanto, los convierte en "magia", o hay un mecanismo técnico? Ejemplo hipotético: si quisiera declarar un Int36, que es un entero con 36 bits, ¿podría crear un tipo que funcione exactamente como un Int32 (aparte de los 4 bits extra de cc) al especificar "Bueno, dejar de lado 36 bits ", o son las primitivas incorporadas en piedra y tendría que trabajar de alguna manera alrededor de esto (es decir, mediante el uso de un Int64 y el código que solo establece los últimos 36 Bits)?
Como dije, todo muy académico e hipotético, pero siempre me pregunté sobre eso.
Gran pregunta en realidad, me he preguntado qué soy yo. – Pierreten
Yo también, esperaba que la pregunta fuera sobre cómo funcionan los tipos de valor, es decir, la pila frente al montón asignado, etc., pero tengo curiosidad sobre esto yo mismo. – Davy8
Re a la edición: por lo que puedo decir, si quisiera crear un Int36, tendría que especificarlo de alguna manera en C# o IL, lo que le obligaría a usar un Int32 + Int8 o un Int64 con los últimos 28 bits ignorados o lo que sea. La única forma de agregar Int36 a la máquina virtual subyacente sin formato y hacer que comprenda la representación a nivel de bit sería implementar su propio CLR a la Mono o Rotor. – itowlson