type number data c# .net types clr

number - type integer c#



Cómo definir qué significa "Tipo" (5)

Extracto del blog de Eric Lippert sobre qué significa "es", es :

Una concepción común de los tipos es que un tipo es un conjunto de [...] valores, y que la compatibilidad de las asignaciones es simplemente verificar para ver si un valor dado es miembro del conjunto necesario. Pero ese no es el caso en C #.

El contraejemplo que da es que null is string devuelve false , pero la string b = null está totalmente bien para el compilador de C #.

Quizás esta es una pregunta tonta, pero ¿cuál es una mejor manera de definir la idea de "tipo" en un contexto C # .Net? ¿Es solo una palabra usada para definir ... reglas de huella de memoria? ... a la CLR? Me doy cuenta de cuán floja (y terriblemente equivocada) es esa definición, pero estoy luchando por encajar un buen envoltorio y agacharme ante la idea del tipo.

Nota: cuanto más simple, pero completamente exacto, mejor. (fuerte tipo N , aquí).


Creo que es posible que estés pensando un poco más ... de acuerdo con la Guía de Programación

La información almacenada en un tipo puede incluir lo siguiente:

  • El espacio de almacenamiento que requiere una variable del tipo.
  • Los valores máximos y mínimos que puede representar.
  • Los miembros (métodos, campos, eventos, etc.) que contiene.
  • El tipo base del que hereda.
  • La ubicación donde se asignará la memoria para las variables en tiempo de ejecución.
  • Los tipos de operaciones que están permitidas.

Sé que no cuenta null pero en c # null es realmente la falta de una dirección de memoria referenciada.


¿Cuál es una mejor manera de definir la idea de "tipo" en un contexto C # .Net? ¿Es solo una palabra usada para definir ... reglas de huella de memoria? Estoy luchando por encajar un buen envoltorio e inclinarme ante la idea del tipo.

Este es un problema complicado. Abriste con un enlace a mi artículo sobre is , pero creo que el que realmente quieres leer es este:

http://blogs.msdn.com/b/ericlippert/archive/2011/08/29/what-is-this-thing-you-call-a-quot-type-quot-part-one.aspx

http://blogs.msdn.com/b/ericlippert/archive/2011/09/07/what-is-this-thing-you-call-a-quot-type-quot-part-two.aspx

Brevemente:

Desde un punto de vista "matemático", un tipo es como un número: una cantidad abstracta que podemos manipular usando reglas. Al igual que "si T es un tipo, entonces T[] también es un tipo", y así sucesivamente.

Una vez que tenemos una noción abstracta de tipo, podemos asignarle un tipo a cada expresión, y luego podemos hacer un verificador que determina automáticamente si un programa sigue las reglas de tipo de seguridad o no.


Aquí hay algunas buenas respuestas a una pregunta similar: ¿Por qué el operador es devuelve falso cuando se le da nulo?

Una discusión más elaborada del literal nulo está aquí: ¿Cuál es el tipo de literal nulo?

Parece que solía haber un tipo nulo en versiones anteriores de .NET para fines simbólicos, pero posteriormente se descartó en versiones posteriores.

Desde la perspectiva de un programador de IL, puedo decir que cuando una declaración como ''if (myvar == null)'' se escribe en IL, sería algo como esto:

Ldloc myvar brfalse IfNullLabel

La variable se verifica para una referencia nula con solo una instrucción IL, independientemente de su tipo. Si esto se compara con otra cadena, entonces se llamará al método Equals. Entonces, internamente, un valor es nulo cuando su referencia apunta al literal nulo. Tan sencillo como eso.


Tener un poco más de contexto ayudaría a responder tu pregunta (" [...] define the idea of ''type'' in a C#.Net context[...] "), pero aquí hay una rápida apunte. El concepto de un tipo en .NET proviene de la programación orientada a objetos , y es una generalización del concepto de tipo de datos de los lenguajes de programación pre-OOP. En su forma más simple, podrías decir que ...

Un tipo es una plantilla con nombre para una estructura, cuyas instancias contienen datos y / o comportamiento.


Respuestas a preguntas en la sección EDITAR:

[...] ¿cómo trata el CLR la idea de un tipo?

No sé exactamente qué quiere decir con eso, pero un tipo en el CLR - la ''plantilla nombrada'' en mi definición anterior - se almacena físicamente como CIL y se representa en el sistema por un objeto que a su vez (como todos los objetos) es de un tipo.

En este caso, ese tipo se llama, con seguridad, System.Type . (En caso de que tenga curiosidad, este tipo se almacena físicamente en el conjunto mscorlib .) Sé que estoy usando un término en su propia definición, pero es difícil no hacerlo, ya que el concepto es intrínsecamente recursivo.

[...] ¿el CLR necesita lanzar implícitamente nulo a una cadena en la cadena de asignación s = null? Las respuestas hasta ahora implican que no, pero ¿qué permite esa tarea? ¿Es nulo simplemente tratado como un caso especial aquí?

Sí, es un caso especial y no, ni el compilador ni el CLR arrojan null a una string (o cualquier otra cosa). null no tiene ningún tipo (1) y no se puede convertir a ningún tipo; es un "valor" especial que denota la ausencia de un valor (2) y, por lo tanto, se puede asignar a una variable de cualquier tipo de referencia (3) .


(1) Según dónde mire, puede ser o no de tipo "tipo nulo" .

(2) Tal valor sería una referencia a una instancia de ese tipo.

(3) Hay dos tipos de tipos : tipos de referencia y tipos de valores , y null solo se aplica al primer tipo . Puede aparecer en el código fuente (por ejemplo, int? i = null; ) como asignado a una variable de un tipo de valor anulable , pero eso es solo azúcar sintáctico y lo que sucede detrás de las escenas es muy diferente y solo se relaciona tangencialmente con esta discusión.


La definición tradicional en inglés de Type es un buen lugar para comenzar.

una categoría de personas o cosas que tienen características comunes.

un tipo .NET define una categoría específica de objeto .NET (es decir: System.IO.Stream). Contiene un conjunto de propiedades y métodos (características) de un tipo particular de objeto .NET.

¿Está buscando una descripción más técnica (es decir, gestión de memoria, etc.)?