it-swarm-es.tech

¿Debo usar int o int32

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

339
Graham

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

Cada uno de los tipos predefinidos es una abreviatura para un tipo proporcionado por el sistema. Por ejemplo, la palabra clave int se 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.

126
SpaceghostAli

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 tu código. Me gustarí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 ampliar int si es apropiado, pero deberían tener cuidado al cambiar Int32s en el mismo camino.

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

263
James Sutherland

Ambos declaran enteros de 32 bits y, como se ha dicho en otros carteles, cuál de los dos utiliza 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.

84
raven

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

  1. Los nombres de los tipos pueden variar entre los lenguajes .NET. Por ejemplo, en C #, long se asigna a System.Int64 mientras que en C++ con extensiones administradas, long se asigna 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

48
Remi Despres-Smyth

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:

  • Necesitas 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.
20
Brownie

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

13
spoulson

El tamaño de bytes para los tipos no es demasiado interesante cuando solo tiene que tratar 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 (y a sus compañeros de trabajo de revisión de código) 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.

9
HidekiAI

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

8
Simon Steele

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. :)

7
Greg D

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.

6
Mark A. Nicolosi

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, llevan 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 se considere realmente es mayor cuando el tamaño está incluido en el nombre. El uso de Int32 también promueve el conocimiento de las otras opciones. Cuando las personas no están obligadas a reconocer al menos que 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
}
5
unknown (yahoo)

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 consistencia, que yo sepa.

5
Raithlin

No debería importarte. Debe usar int la 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 de 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 "using System;" asociado).

4
yhdezalvarez

Recomiendo usar Microsoft StyleCop .

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.

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

3
devstuff

int es lo 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 ...

3
Jack Bolding

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 empezaron 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, _ Se supone queint es de 32 bits.

3
Joel Coehoorn

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ó [fuente]

"Sobre 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.

Entonces, creo que es seguro decir que todos los tipos de C # incorporados mantendrán su asignación actual. "

3
Ray Hayes

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.

2
David Basarab

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

2
Jesper Kihlberg

No hay ninguna 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");

2
chrisb

int es un alias para System.Int32, como se define en esta tabla: Tabla de tipos incorporados (referencia de C #)

1
Jim T

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.

0
bovium

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 utilizó "Int32" frente a "int" y "Cadena" frente a "cadena".

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 enumeración usando el "Int32", pero lo hace cuando 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

0
Schmuli

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ía preocuparse porque hace que su 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 se pierde un error si el int ocasionalmente supera los 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.

0
user11211

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 saber necesitarás más de 32 bits por ejemplo)

0
Stacker

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, 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.

0
Michael Meadows

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

Ver también mi responder aquí a una pregunta relacionada.

0
Keith

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
0
Selim

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). .)

0
Chris Pietschmann