remarks practices generate cref best c# variable-types

c# - practices - ¿Debo usar int o int32



remarks c# (30)

A pesar de que son (en su mayoría) idénticos (consulte a continuación la diferencia de [error]), definitivamente debería preocuparse y debe usar Int32.

  • El nombre para un entero de 16 bits es Int16. Para un entero de 64 bits es Int64, y para un entero de 32 bits, la opción intuitiva es: int o Int32?

  • La pregunta sobre el tamaño de una variable de tipo Int16, Int32 o Int64 se refiere a sí misma, pero la pregunta sobre el tamaño de una variable de tipo int es una pregunta y preguntas perfectamente válidas, sin importar cuán triviales, distraen, lideran a la confusión, perder el tiempo, dificultar la discusión, etc. (el hecho de que exista esta pregunta demuestra el punto).

  • El uso de Int32 promueve que el desarrollador sea consciente de su elección de tipo. ¿Qué tan grande es un int de nuevo? Ah, sí, 32. La probabilidad de que el tamaño del tipo sea realmente considerado es mayor cuando el tamaño está incluido en el nombre. Usar Int32 también promueve el conocimiento de las otras opciones. Cuando las personas no están obligadas a reconocer, al menos, hay alternativas, se vuelve demasiado fácil para que int se convierta en "EL tipo entero".

  • La clase dentro del marco destinado a interactuar con enteros de 32 bits se denomina Int32. Una vez más, que es: más intuitivo, menos confuso, carece de una traducción (innecesaria) (no una traducción en el sistema, sino en la mente del desarrollador), etc. int lMax = Int32.MaxValue o Int32 lMax = Int32.MaxValue ?

  • int no es una palabra clave en todos los lenguajes .NET.

  • Aunque hay argumentos por los que no es probable que alguna vez cambie, int puede no ser siempre un Int32.

Los inconvenientes son dos caracteres adicionales para escribir y [error].

Esto no compilará

public enum MyEnum : Int32 { AEnum = 0 }

Pero esto va a:

public enum MyEnum : int { AEnum = 0 }

En C #, int e Int32 son lo mismo, pero he leído varias veces que se prefiere int sobre Int32 sin ninguna razón. ¿Hay alguna razón, y debería importarme?


Algunos compiladores tienen diferentes tamaños para int en diferentes plataformas (no específicas de C #)

Algunos estándares de codificación (MISRA C) requieren que todos los tipos utilizados tengan un tamaño especificado (es decir, Int32 y no int).

También es bueno especificar prefijos para diferentes variables de tipo (por ejemplo, b para byte de 8 bits, w para palabra de 16 bits y l para palabra de 32 bits = = Int32 lMyVariable)

Deberías preocuparte porque hace que tu código sea más portátil y más fácil de mantener.

Es posible que Portable no sea aplicable a C # si siempre va a utilizar C # y la especificación de C # nunca cambiará a este respecto.

El ihmo mantenible siempre será aplicable, ya que la persona que mantiene su código puede no estar al tanto de esta especificación de C # en particular, y perder un error en el que el int se convierte ocasionalmente en más de 2147483647.

En un bucle simple que cuenta, por ejemplo, los meses del año, no le importará, pero cuando use la variable en un contexto en el que posiblemente podría fluir, debería preocuparse.

También debe preocuparse si va a realizar operaciones de bit-wise en él.


Ambos declaran enteros de 32 bits y, como se ha dicho en otros carteles, el que se usa es principalmente una cuestión de estilo sintáctico. Sin embargo, no siempre se comportan de la misma manera. Por ejemplo, el compilador de C # no permitirá esto:

public enum MyEnum : Int32 { member1 = 0 }

pero permitirá esto:

public enum MyEnum : int { member1 = 0 }

Imagínate.


Como ya se ha dicho, int = Int32 . Para estar seguro, asegúrese de usar siempre int.MinValue / int.MaxValue cuando implemente algo que se preocupe por los límites de los tipos de datos. Supongamos que .NET decidió que int sería ahora Int64 , su código dependería menos de los límites.


De acuerdo con la Ventana Inmediata en Visual Studio 2012 Int32 es int, Int64 es largo. Aquí está la salida:

sizeof(int) 4 sizeof(Int32) 4 sizeof(Int64) 8 Int32 int base {System.ValueType}: System.ValueType MaxValue: 2147483647 MinValue: -2147483648 Int64 long base {System.ValueType}: System.ValueType MaxValue: 9223372036854775807 MinValue: -9223372036854775808 int int base {System.ValueType}: System.ValueType MaxValue: 2147483647 MinValue: -2147483648


El tamaño de bytes para los tipos no es demasiado interesante cuando solo tiene que lidiar con un solo idioma (y para el código que no tiene que recordarse sobre los desbordamientos matemáticos). La parte que se vuelve interesante es cuando se pasa de un idioma a otro, de C # a un objeto COM, etc., o se está haciendo un poco de cambio o enmascaramiento y debe recordarse a sí mismo (y a sus compañeros de trabajo de revisión de códigos) del tamaño de los datos.

En la práctica, normalmente uso Int32 solo para recordarme qué tamaño son porque escribo C ++ administrado (para enlazar con C # por ejemplo) así como C ++ no administrado / nativo.

Como probablemente sepa, en C # es de 64 bits, pero en C ++ nativo, termina en 32 bits, o char es unicode / 16 bits, mientras que en C ++ es de 8 bits. Pero, ¿cómo sabemos esto? La respuesta es, porque lo hemos buscado en el manual y así lo dijo.

Con el tiempo y las experiencias, comenzarás a ser más concienzudo cuando escribas códigos para establecer un puente entre C # y otros idiomas (algunos lectores aquí están pensando "¿por qué lo harías?"), Pero en mi humilde opinión creo que es una práctica mejor porque No puedo recordar lo que he codificado la semana pasada (o no tengo que especificar en mi documento API que "este parámetro es un entero de 32 bits").

En F# (aunque nunca lo he usado), definen int , int32 y nativeint . La misma pregunta debería surgir, "¿cuál uso?". Como otros han mencionado, en la mayoría de los casos, no debería importar (debe ser transparente). Pero, por mi parte, elegiría int32 y uint32 solo para eliminar las ambigüedades.

Supongo que solo dependería de qué aplicaciones está codificando, quién lo está utilizando, qué prácticas de codificación siguen usted y su equipo, etc. para justificar cuándo usar Int32.


El uso de Int o Int32 son los mismos. Int es solo azúcar para simplificar el código para el lector.

Utilice la variante de Nullable Int? o int32? cuando trabajas con bases de datos en campos que contienen nulos. Eso te salvará de muchos problemas de tiempo de ejecución.


El uso del tipo Int32 requiere una referencia de espacio de nombres a System , o completamente calificado ( System.Int32 ). Tiendo hacia int , porque no requiere una importación de espacio de nombres, por lo que reduce la posibilidad de colisión de espacios de nombres en algunos casos. Cuando se compila a IL, no hay diferencia entre los dos.


En mi experiencia, ha sido una cosa de la convención. No tengo conocimiento de ninguna razón técnica para usar int sobre Int32, pero es:

  1. Más rápido de escribir.
  2. Más familiar para el desarrollador típico de C #.
  3. Un color diferente en el resaltado de sintaxis de Visual Studio por defecto.

Me gusta especialmente esta última. :)


Hace un tiempo, estaba trabajando en un proyecto con Microsoft cuando recibimos la visita de alguien del equipo de productos de Microsoft .NET CLR. Esta persona codificó ejemplos y cuando definió sus variables usó “Int32” vs. “int” y “String” vs. “string”.

Recordé haber visto este estilo en otro código de ejemplo de Microsoft. Entonces, investigué un poco y descubrí que todos dicen que no hay diferencia entre el "Int32" y el "int", excepto el color de sintaxis. De hecho, encontré una gran cantidad de material que sugiere que use "Int32" para hacer que su código sea más legible. Entonces, adopté el estilo.

El otro día encontré una diferencia! El compilador no le permite escribir enum mediante el "Int32", pero sí cuando se usa "int". No me preguntes por qué, porque todavía no lo sé.

Ejemplo:

public enum MyEnum : Int32 { AEnum = 0 }

Esto funciona.

public enum MyEnum : int { AEnum = 0 }

Tomado de: notación int32 vs. int


Los dos son en verdad sinónimos; int será un poco más familiar, Int32 hace que el bit de 32 bits sea más explícito para aquellos que leen su código. Me sentiría inclinado a usar int donde solo necesito ''un número entero'', Int32 donde el tamaño es importante (código criptográfico, estructuras) para que los futuros mantenedores sepan que es seguro agrandar un int si es apropiado, pero deberían tener cuidado al cambiar los Int32 s de la misma manera

El código resultante será idéntico: la diferencia es puramente de legibilidad o apariencia del código.


No debe preocuparse por la mayoría de los lenguajes de programación, a menos que necesite escribir funciones matemáticas muy específicas o un código optimizado para una arquitectura específica ... Solo asegúrese de que el tamaño del tipo sea suficiente para usted (use algo más grande que un Int si sabes que necesitarás más de 32 bits por ejemplo)


No debería importarte. Debes usar int mayor parte del tiempo. Ayudará a que su programa se traslade a una arquitectura más amplia en el futuro (actualmente int es un alias para System.Int32 pero eso podría cambiar). Solo cuando el ancho de bits de la variable es importante (por ejemplo: para controlar el diseño en la memoria de una struct ), debe usar int32 y otros (con el asociado " using System; ").


No hay diferencia en la práctica y con el tiempo adoptarás tu propia convención. Tiendo a usar la palabra clave cuando asigno un tipo, y la versión de la clase cuando uso métodos estáticos y tales:

int total = Int32.Parse ("1009");


No hay diferencia entre int e Int32 , pero como int es una palabra clave del lenguaje, muchas personas la prefieren estilísticamente (al igual que con string vs String ).


No importa. int es la palabra clave del idioma e Int32 su tipo de sistema real.

Véase también mi respuesta aquí a una pregunta relacionada.


No te debe importar. Si el tamaño es una preocupación, usaría byte, short, int, y luego long. La única razón por la que usaría un int más grande que int32 es si necesita un número mayor que 2147483647 o menor que -2147483648.

Aparte de eso no me importaría, hay muchos otros elementos que preocuparse.


Recomiendo usar StyleCop de Microsoft.

Es como FxCop , pero para problemas relacionados con el estilo. La configuración predeterminada coincide con las guías de estilo internas de Microsoft, pero puede personalizarse para su proyecto.

Puede tardar un poco en acostumbrarse, pero definitivamente hace que su código sea más agradable.

Puede incluirlo en su proceso de compilación para verificar automáticamente si hay violaciones.


Sé que la mejor práctica es usar int, y todo el código de MSDN usa int. Sin embargo, no hay una razón más allá de la estandarización y la coherencia, que yo sepa.


Siempre uso los tipos de sistema, por ejemplo, Int32 en lugar de int. Adopté esta práctica después de leer Programación de .NET Framework aplicada : el autor Jeffrey Richter es un buen caso para usar los nombres tipográficos completos. Aquí están los dos puntos que se quedaron conmigo:

  1. Los nombres de los tipos pueden variar entre los lenguajes .NET. Por ejemplo, en C #, long mapas long a System.Int64, mientras que en C ++ con extensiones administradas, long mapas long a Int32. Dado que los idiomas pueden combinarse y combinarse mientras se usa .NET, puede estar seguro de que usar el nombre de clase explícito siempre será más claro, sin importar el idioma preferido del lector.

  2. Muchos métodos de marco tienen nombres de tipo como parte de sus nombres de método:

    BinaryReader br = new BinaryReader( /* ... */ );

    float val = br.ReadSingle(); // OK, but it looks a little odd...

    Single val = br.ReadSingle(); // OK, and is easier to read


Siempre utilizo los tipos de alias (int, cadena, etc.) al definir una variable y uso el nombre real al acceder a un método estático:

int x, y; ... String.Format ("{0}x{1}", x, y);

Simplemente parece feo ver algo como int.TryParse (). No hay otra razón por la que hago esto que no sea el estilo.


También considere Int16. Si necesita almacenar un Integer en memoria en su aplicación y le preocupa la cantidad de memoria utilizada, entonces podría usar Int16, ya que usa menos memoria y tiene un rango mínimo / máximo más pequeño que Int32 (que es lo que es int). .)


Una vez, el tipo de datos int se vinculó al tamaño de registro de la máquina seleccionada por el compilador. Entonces, por ejemplo, un compilador para un sistema de 16 bits usaría un entero de 16 bits.

Sin embargo, afortunadamente ya no vemos mucho más de 16 bits, y cuando los de 64 bits comenzaron a ser populares, la gente estaba más preocupada por hacerla compatible con el software más antiguo y los de 32 bits habían existido tanto tiempo que para la mayoría de los compiladores, un int. se supone que es de 32 bits.


Utilizo int en el caso de que Microsoft cambie la implementación predeterminada de un entero a una nueva versión de fangled (llamémosla Int32b).

Microsoft puede luego cambiar el alias int a Int32b, y no tengo que cambiar ninguno de mis códigos para aprovechar su nueva implementación de enteros (y posiblemente mejorada).

Lo mismo ocurre con cualquiera de las palabras clave de tipo.


int es el acceso directo del lenguaje C # para System.Int32

Si bien esto significa que Microsoft podría cambiar esta asignación, una publicación en las discusiones de FogCreek declaró [source]

"En el problema de 64 bits, Microsoft está trabajando en una versión de 64 bits de .NET Framework, pero estoy bastante seguro de que no se asignará a 64 bits en ese sistema.

Razones:

1. El estándar C # ECMA dice específicamente que int es de 32 bits y largo es de 64 bits.

2. Microsoft introdujo propiedades y métodos adicionales en Framework versión 1.1 que devuelven valores largos en lugar de valores int, como Array.GetLongLength además de Array.GetLength.

Así que creo que es seguro decir que todos los tipos de C # incorporados mantendrán su mapeo actual ".


int es el mismo que System.Int32 y cuando se compila se convertirá en lo mismo en CIL .

Usamos int por convención en C # ya que C # quiere parecerse a C y C ++ (y Java) y eso es lo que usamos allí ...

Por cierto, acabo usando System.Int32 cuando declaro importaciones de varias funciones API de Windows. No estoy seguro de si esta es una convención definida o no, pero me recuerda que voy a una DLL externa ...


int es una palabra clave de C # y no es ambigua.

La mayoría de las veces no importa, pero hay dos cosas que van en contra de Int32:

  • Es necesario tener un "sistema de uso"; declaración. el uso de "int" no requiere una declaración de uso.
  • Es posible definir su propia clase llamada Int32 (lo que sería una tontería y confuso). int siempre significa int.

ECMA-334 : Especificación del lenguaje C # 2006 (p18):

Cada uno de los tipos predefinidos es una abreviatura para un tipo proporcionado por el sistema. Por ejemplo, la palabra clave int refiere a la estructura System.Int32 . Como cuestión de estilo, el uso de la palabra clave se favorece sobre el uso del nombre completo del tipo de sistema.


int e Int32 es lo mismo. int es un alias para Int32 .