Ответ 1
Просто чтобы уточнить: не все согласны с авторами StyleCop. Win32 и .NET гуру Джеффри Рихтер пишет в своей отличной книге CLR через С#:
Спецификация языка С# гласит: "В зависимости от стиля использование ключевого слова предпочтительнее использование полного имени типа системы." Я не согласен с языком спецификации, я предпочитаю использовать имена типов FCL и полностью исключить имена примитивных типов. На самом деле я желаю компиляторы даже не предлагали примитивные имена типов и вынуждали разработчиков использовать FCL вместо имен типов. Вот мои причины:
Я видел, как некоторые разработчики путались, не зная, следует ли использовать строкуили Строка в коде. Потому что в С# строка (ключевое слово) отображает System.String (тип FCL), нет никакой разницы и может быть использована. По аналогии, Ive слышал, как некоторые разработчики говорят, что int представляет 32-битное целое число, когда приложение работает на 32-разрядной ОС и что он представляет собой 64-разрядное целое число, когда приложение работает на 64-битной ОС. Это утверждение абсолютно неверно: в С# всегда int отображает до System.Int32, и поэтому он представляет собой 32-разрядное целое, независимо от ОС, код работает. Если бы программисты использовали в своем коде Int32, то этот потенциал путаница также устранена.
В С#, long отображаются карты System.Int64, но на другом языке программирования длинныйможет сопоставляться с Int16 или Int32. На самом деле, С++/CLI обрабатывает long как Int32. Кто-то, читающий исходный код на одном языке, может легко неверно интерпретировать коды если он или она были использованы для программирования на другом языке программирования. На самом деле, большинство языков даже не обрабатывают long как ключевое слово и не компилируют код который использует его.
В FCL есть много методов, которые имеют имена типов как часть имен их методов. Для Например, тип BinaryReader предлагает такие методы, как ReadBoolean, ReadInt32, ReadSingle и т.д., а тип System.Convert предлагает такие методы, как ToBoolean, ToInt32, ToSingle и т.д. Хотя законно написать следующее код, строка с float кажется мне очень неестественной, и не очевидно, что линия правильно:
BinaryReader br = new BinaryReader(...); float val = br.ReadSingle(); // OK, but feels unnatural Single val = br.ReadSingle(); // OK and feels good
Многие программисты, использующие С#, имеют тенденцию забывать о том, что другое программирование языки могут использоваться против CLR, и из-за этого С# -измерения ползут в класс библиотеки. Например, Microsoft FCL почти исключительно написана на С# и разработчики из команды FCL теперь внедрили методы в библиотеку, такие как Массив s GetLongLength, который возвращает значение Int64, которое является длинным на С#, но не на других языках (например, С++/CLI). Другим примером является System.Linq.Enumerable s LongCount.