Должен ли я использовать Int или Int32 - PullRequest
339 голосов
/ 15 сентября 2008

В C # int и Int32 - это одно и то же, но я несколько раз читал, что int предпочтительнее, чем Int32 без объяснения причин. Есть ли причина, и мне все равно?

Ответы [ 34 ]

264 голосов
/ 15 сентября 2008

Два действительно являются синонимами; int будет немного более знакомым, Int32 делает 32-битность более понятной для тех, кто читает ваш код. Я был бы склонен использовать int там, где мне просто нужно «целое число», Int32, где важен размер (криптографический код, структуры), чтобы будущие сопровождающие знали, что при необходимости безопасно увеличить int, но позаботьтесь об изменении Int32 s таким же образом.

Полученный код будет идентичен: разница только в удобочитаемости или появлении кода.

126 голосов
/ 15 сентября 2008

ECMA-334 : 2006 C # Спецификация языка (p18):

Каждый из предопределенных типов является сокращением для системного типа. Например, ключевое слово int относится к структуре System.Int32. В качестве стиля использование ключевого слова предпочтительнее использования полного имени системного типа.

84 голосов
/ 15 сентября 2008

Они оба объявляют 32-битные целые числа, и, как указывалось в других плакатах, какой из них вы используете, это в основном вопрос синтаксического стиля. Однако они не всегда ведут себя одинаково. Например, компилятор C # не допустит этого:

public enum MyEnum : Int32
{
    member1 = 0
}

но это позволит:

public enum MyEnum : int
{
    member1 = 0
}

Иди на цифру.

48 голосов
/ 15 сентября 2008

Я всегда использую системные типы - например, Int32 вместо int. Я применил эту практику после прочтения Прикладное программирование на .NET Framework - автор Джеффри Рихтер хорошо обосновывает использование полных имен типов. Вот два момента, которые застряли у меня:

  1. Имена типов могут различаться в зависимости от языка .NET. Например, в C # long сопоставляется с System.Int64, а в C ++ с управляемыми расширениями long сопоставляется с Int32. Поскольку языки могут смешиваться и сочетаться при использовании .NET, вы можете быть уверены, что использование явного имени класса всегда будет более понятным, независимо от предпочтительного языка читателя.

  2. Многие методы каркаса имеют имена типов как часть имен своих методов:

    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

20 голосов
/ 15 сентября 2008

int является ключевым словом C # и является однозначным.

В большинстве случаев это не имеет значения, но две вещи противоречат Int32:

  • Вам необходимо иметь «использую систему»; заявление. использование "int" не требует использования оператора.
  • Можно определить свой собственный класс с именем Int32 (который был бы глупым и запутанным). int всегда означает int.
13 голосов
/ 15 сентября 2008

Как уже говорилось, int = Int32. В целях безопасности всегда используйте int.MinValue / int.MaxValue при реализации всего, что касается границ типов данных. Предположим, что .NET решил, что int теперь будет Int64, ваш код будет меньше зависеть от границ.

9 голосов
/ 15 сентября 2008

Размер байта для типов не слишком интересен, когда вам приходится иметь дело только с одним языком (и для кода, который вам не нужно напоминать себе о математических переполнениях). Интересной становится часть, когда вы соединяете один язык с другим, C # с COM-объектом и т. Д., Или вы выполняете какое-то переключение битов или маскирование, и вам нужно напомнить себе (и вашим коллегам по пересмотру кода) размера данных.

На практике я обычно использую Int32 только для того, чтобы напомнить себе, какого они размера, потому что я пишу управляемый C ++ (например, для соединения с C #), а также неуправляемый / нативный C ++.

Как вы, наверное, знаете, в C # он 64-битный, но в нативном C ++ он заканчивается как 32-битный, или char - unicode / 16-битный, тогда как в C ++ он 8-битный. Но откуда мы это знаем? Ответ таков, потому что мы посмотрели это в руководстве, и там было сказано.

Со временем и опытом вы начнете быть более добросовестным, когда будете писать коды для связи между C # и другими языками (некоторые читатели здесь думают «почему вы?»), Но ИМХО, я считаю, что это лучше практиковаться, потому что я не могу вспомнить, что я кодировал на прошлой неделе (или мне не нужно указывать в своем документе API, что «этот параметр является 32-разрядным целым числом»).

В F # (хотя я никогда не использовал его) они определяют int , int32 и nativeint . Тот же самый вопрос должен подняться: «Какой из них я использую?». Как уже упоминали другие, в большинстве случаев это не должно иметь значения (должно быть прозрачным). Но я бы, например, выбрал int32 и uint32, чтобы убрать неясности.

Полагаю, это будет зависеть от того, какие приложения вы кодируете, кто его использует, какие практики кодирования вы и ваша команда выполняете и т. Д., Чтобы обосновать, когда следует использовать Int32.

8 голосов
/ 15 сентября 2008

Нет никакой разницы между int и Int32, но, поскольку int является ключевым словом языка, многие люди предпочитают его стилистически (так же, как и string против String).

7 голосов
/ 15 сентября 2008

По моему опыту, это было обычным делом. Я не знаю каких-либо технических причин использовать int поверх Int32, но это:

  1. Быстрее печатать.
  2. Более знакомо типичному разработчику C #.
  3. Другой цвет в подсветке синтаксиса Visual Studio по умолчанию.

Мне особенно нравится этот последний. :)

6 голосов
/ 29 сентября 2008

Я всегда использую псевдонимы типа (int, string и т. Д.) При определении переменной и реальное имя при доступе к статическому методу:

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

Просто некрасиво видеть что-то вроде int.TryParse (). Нет другой причины, по которой я делаю это, кроме стиля.

...