2009-05-26 3 views
7

C# и VB.NET поставляется со встроенными типами, которые сопоставляются с типами CLR. Примерами являются: int (C#) и Integer (VB) для карт System.Int32, long (C#) и Long (VB) для System.Int64. Каковы наилучшие методы решения, когда использовать встроенные типы или не использовать их (используя вместо них System. * Structs/classes)?Встроенные типы, когда (не) использовать?

+0

Я выбрал ответ Шона, потому что он дает мне твердую почву выбора между двумя вариантами.В другом ответе просто указывается, что «это равно, используйте либо» - это не очень полезно, ИМО. Если я смогу выбрать второй лучший ответ, это будет Рид. В любом случае, поскольку люди жалуются, я дам вам больше ответов ... –

ответ

14

Единственный раз, когда я когда-либо явно использовал «System.XYZ", в отличие от встроенного ключевого слова типа, когда мне нужен целочисленный тип очень определенного размера, и я хочу, чтобы это было ясно для всех, кто читает мой код (например, я может использовать Int32 вместо int, если число в вопрос на самом деле 4 8-битовые поля упакованы вместе.)

15

типы языка (например, строка, INT, символ) просто псевдонимы для типов CLR (System.String, система .Int32, System.Char).

Они взаимозаменяемы, нет необходимости отдать предпочтение друг другу.

EDIT

Плакат попросили о помощи в выборе между этими двумя, очень хорошо.

Лично я , как правило, выбрать типы языка C# (INT, строка, символ и т.д.), поскольку они включают меньше набирать - я полагаю, я просто ленивый :)

+0

Другими словами. Это то же самое. Think: String s = "hi"; Строка s2 = s; s и s2 - это одна и та же строка. – jjnguy

+0

@jjnguy: Это не значит, что значения S & S2 равны, игнорируйте значения. Я говорю, что типы, которые содержат значения (а не значения), идентичны. т. е. строка s1 = "Hello"; System.String s2 = «Мир»; s1 - тот же ТИП, что и s2, независимо от того, что их значения различаются. –

37

Я почти всегда использовать встроенные в псевдонимах, таких как int/short/long. Их легче читать и не требуют, чтобы вы импортировали систему или набирали System.Int32 всюду и т. Д.

Язык четко определяет их и дает им конкретное значение, поэтому я не вижу никакого вреда. Тем не менее, это 100% личный выбор.

Это говорит о том, что одно место, где я явно использую Int32, Int16 и т. Д., - это если я имею дело с двоичным хранением или переносом, особенно в пользовательский двоичный формат или из него. В этом случае наличие явного битрейта каждого элемента, входящего и выходящего из файла, делает код более читабельным и понятным, ИМО.

2

Использование «int» и «Int32» (и других) точно такое же. Типично используются ключевые слова (int, Integer (vb.net), bool и т. Д.), Поскольку он короче и выложен в среде IDE.

5

Я всегда использую типы System.*, потому что они выглядят более согласованными между другими классами - первой буквой верхнего регистра и той же подсветкой синтаксиса. Но это только личное предпочтение и просто эстетическая проблема.

1

Вместо того, чтобы использовать или не использовать типы языков в сравнении с явными именами классов BCL, более важно знать, является ли тип, который вы собираетесь использовать, CLS Compliant.

В частности, целые типы без знака не являются совместимыми с CLS, потому что нет требования, чтобы язык поддерживал беззнаковое целочисленное математическое выражение.

За исключением этой морщинки ... Я бы рекомендовал, какая идиома в большей степени соответствует вашим практикам кода организации. Если вы полностью назовете ваши ссылки на типы, я продолжу этот шаблон с пространством имен System. * ... (я бы также рекомендовал против этой практики, поскольку он добавляет нагрузку считывателя без сопутствующего усиления в ясности).

+0

И 6 лет спустя: в наборе правил StyleCop используются встроенные функции. –

Смежные вопросы