Ответ 1
Unsigned int не совместим с CLS и поэтому ограничивает использование свойства теми языками, которые реализуют UInt
.
Смотрите здесь:
Рамка 1.1
Framework 2.0
Почему Array.Length
int, а не uint
. Это беспокоит меня (только немного), потому что значение длины никогда не может быть отрицательным.
Это также вынудило меня использовать int для свойства длины в моем собственном классе, потому что когда вы указываете int-значение, это должно быть приведено явно...
Итак, последний вопрос: есть ли смысл для беззнакового целого (uint
)? Кажется, даже Microsoft не использует их.
Unsigned int не совместим с CLS и поэтому ограничивает использование свойства теми языками, которые реализуют UInt
.
Смотрите здесь:
Рамка 1.1
Framework 2.0
Множество причин:
Я думаю, что это также может быть связано с упрощением вещей на более низком уровне, поскольку Array.Length, конечно, будет добавлено к отрицательному числу в какой-то момент, если Array.Length были без знака и добавлены к отрицательному int ( два дополнения), могут быть беспорядочные результаты.
Похоже, никто не ответил на "окончательный вопрос".
Я считаю, что первичное использование unsigned ints заключается в обеспечении более удобного взаимодействия с внешними системами (P/Invoke и т.п.) и для покрытия потребностей различных языков, переносимых в .NET.
Как правило, целочисленные значения подписываются, если вы явно не нуждаетесь в значении без знака. Это так, как они используются. Я могу не согласиться с этим выбором, но так, как есть.
В настоящее время, с сегодняшними типичными ограничениями памяти, если вашему массиву или подобной структуре данных требуется длина UInt32, вы должны рассмотреть другие структуры данных.
С массивом байтов Int32 даст вам 2 ГБ значений