De ce este Array.Length
un int, și nu un uint
. Acest lucru mă deranjează (doar puțin), deoarece o valoare de lungime nu poate niciodată să fie negativă.
Acest lucru ma forțat, de asemenea, să folosesc un int pentru o proprietate de lungime pe propria mea clasă, pentru că atunci când tu specificați o valoare int, aceasta trebuie exprimată în mod explicit ...
Deci, întrebarea finală este: există o utilizare pentru un int unsigned ( uint
)? Chiar și Microsoft pare să nu le folosească.
De obicei, sunt semnate valori întregi, cu excepția cazului în care aveți nevoie explicit de o valoare nesemnată. Doar așa sunt folosite. Poate că nu sunt de acord cu această alegere, dar așa este.
Pentru moment, cu constrângerile de memorie tipice de astăzi, dacă structura de date matrice sau de date similare necesită o lungime UInt32, trebuie să luați în considerare și alte structuri de date.
Cu o serie de octeți, Int32 vă va oferi 2 GB de valori
Unsigned int nu este compatibil cu CLS și, prin urmare, ar limita utilizarea proprietății în acele limbi care implementează un UInt
.
Vezi aici:
Cadrul 1.1
Cadrul 2.0
Cred că s-ar putea să aibă de-a face cu simplificarea lucrurilor la un nivel inferior, deoarece Array.Length va fi, desigur, adăugat la un număr negativ la un moment dat, dacă Array.Length a fost nesemnificat și adăugat la un int negativ (complementul celor doi) , ar putea fi rezultate dezordonate.
Se pare că nimeni nu a răspuns la "întrebarea ulterioară".
Cred că utilizarea primară a insignelor nesemnate este de a oferi o interfață mai ușoară cu sistemele externe (P / Invocate și altele asemenea) și pentru a acoperi necesitățile diferitelor limbi care sunt portate în .NET.
Multe motive: