2009-05-26 11 views
7

C# y VB.NET vienen con tipos incorporados que se correlacionan con los tipos CLR. Algunos ejemplos son: int (C#) y Entero (VB) se asigna a System.Int32, long (C#) y Long (VB) se asigna a System.Int64. ¿Cuáles son las mejores prácticas para decidir cuándo usar tipos incorporados o no usarlos (utilizando en su lugar las estructuras/clases de System. *)?Tipos incorporados, cuándo (no) usar?

+0

Elegí la respuesta de Shawn porque me proporciona una sólida base para elegir entre las dos opciones.Otra respuesta simplemente dice "es igual, usa cualquiera" - esto no es realmente útil, OMI. Si puedo elegir la segunda mejor respuesta, sería la de Reed. De todos modos, ya que la gente se queja, voy a dejar que lleguen más respuestas en ... –

Respuesta

14

La única vez que utilizaría explícitamente "System.XYZ" en lugar de una palabra clave de tipo incorporada es cuando necesito un tipo entero de tamaño muy específico, y quiero que todo el que lea mi código lo vea con claridad (por ejemplo, podría utilizar en lugar de Int32int si el número entero de que se trata en realidad es de 4 campos de 8 bits empaquetados juntos.)

15

los tipos de lenguaje (por ejemplo, cadena, int, char) son simplemente Alias ​​para los tipos CLR (System.String, Sistema .Int32, System.Char).

Son intercambiables, no hay necesidad de preferir uno sobre el otro.

EDITAR

El cartel pidió un poco de ayuda para elegir entre los dos, muy bien.

Personalmente tiendo para elegir los tipos de lenguaje C# (int, cadena, char, etc), ya que implican menos escribir - Supongo que soy un vago :)

+0

En otras palabras. Ellos son exactamente lo mismo. Piensa: String s = "hola"; Cadena s2 = s; s y s2 son la misma cadena. – jjnguy

+0

@jjnguy: Esto no se trata de que los valores de S & S2 sean iguales, ignore los valores. Estoy diciendo que los tipos que contienen los valores (no los valores) son idénticos. es decir, cadena s1 = "Hola"; System.String s2 = "Mundo"; s1 es el mismo TIPO que s2, independientemente del hecho de que sus valores sean diferentes. –

37

que casi siempre utiliza el incorporado en alias, como int/short/long. Son más fáciles de leer y no requieren que importe System o escriba System.Int32 en todas partes, etc.

El lenguaje los define claramente y les da un significado específico, así que no veo ningún daño. Sin embargo, esto es 100% una elección personal.

Dicho esto, el único lugar donde uso explícitamente Int32, Int16, etc., es si estoy tratando con el almacenamiento o la transferencia binarios, especialmente hacia o desde un formato binario personalizado. En este caso, tener el tamaño de bits explícito de cada miembro entrando y saliendo del archivo hace que el código sea más legible y comprensible, IMO.

2

El uso de "int" e "Int32" (y los demás) son exactamente los mismos. Normalmente se utilizan las palabras clave (int, Integer (vb.net), bool, etc ...), porque es más corto y está resaltado en IDE.

5

Siempre utilizo los tipos System.* porque se ven más consistentes entre otras clases: mayúscula en minúscula y el mismo resaltado de sintaxis. Pero eso es solo una preferencia personal y solo un problema estético.

1

En lugar de utilizar o no los tipos de idioma frente a los nombres de clase BCL explícitos, es más importante saber si el tipo que pretende utilizar cumple con CLS o no.

Específicamente, los tipos de enteros sin signo no son compatibles con CLS porque no es necesario que un lenguaje admita el entero matemático sin signo.

Aparte de esta arruga ... Recomendaría cualquier idioma que esté más en consonancia con las prácticas de código de su organización. Si asigna un espacio de nombre completo a sus referencias de tipo, entonces continuaría ese patrón con el espacio de nombres System. * ... (También recomendaría contra esa práctica, ya que agrega la carga del lector sin ganancia de operador en claridad).

+0

Y 6 años después: el conjunto de reglas de StyleCop dice usar los builtins. –

Cuestiones relacionadas