Страницы

Поиск по вопросам

среда, 3 октября 2018 г.

Что лучше использовать, uint или int в качестве аргумента функции, если значение должно быть >=0. Что использовать в качестве идентификатора?

В чужом коде на C# нигде не встречаю uint, ushort, ulong. Если требуется строго положительный аргумент, то в начале функции обычно есть проверка с выбросом исключения, если аргумент отрицательный. Хотя аргумент мог бы быть положительным, если бы в функциях использовали uint
Почему его не используют?
Почему не используют uint в качестве первичного ключа в таблице базы данных, если идентификатор все равно положительный (ни в одном из проектов я не видел отрицательных идентификаторов)?
Есть какая-то причина использовать обычный int вместо uint(unsigned int)?


Ответ

Дело в том, что сборка, которая получается при компиляции, может быть использована другими языками, работающими на платформе .NET. В этих языках может и не быть беззнаковых целых чисел, и если публичные методы сборки содержат типы наподобие uint, вашу сборку невозможно будет использовать с такими языками. (Если сборка может работать со всеми языками под .NET, про неё говорят CLS-compliant.)
Если вы пишете библиотеку для «всего мира», то использование её из экзотических языков — неплохая цель, поэтому такие библиотеки часто ограничены в использовании типов. Если же вы пишете код для себя, или не пишете библиотеку, то по идее можно использовать любой подходящий тип.

Если вы хотите, чтобы ваша сборка была совместима с другими языками, проще всего дать ей атрибут [assembly: CLSCompliant(true)] (прописывается в любом файле, снаружи классов, например, в Assembly.cs), и компилятор сам предупредит о нарушениях. Подробная документация здесь

Комментариев нет:

Отправить комментарий