Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 doekman
doekman

De ce este Array.Length un int, și nu un uint

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ă.

86 2008-08-08T19:34:13+00:00 4
Programare
.net
c#
int
uint
Comentarii la întrebare (0)
Lasse Vågsæther Karl
8 august 2008 в 11:40
2008-08-08T23:40:31+00:00
Mai mult
Sursă
Editează
#6309

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

0
0
Comentarii (0)
Kev
8 august 2008 в 11:50
2008-08-08T23:50:14+00:00
Mai mult
Sursă
Editează
#6320

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

Introducere în Biblioteca de clasă .NET Framework

Cadrul 2.0

Privire de ansamblu asupra claselor .NET Framework

0
0
Comentarii (0)
Utilizator anonim
9 august 2008 в 12:05
2008-08-09T00:05:07+00:00
Mai mult
Sursă
Editează
#6338

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.

0
0
Comentarii (0)
Constantin
13 octombrie 2008 в 7:23
2008-10-13T19:23:42+00:00
Mai mult
Sursă
Editează
#197975

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.

0
0
Comentarii (0)
ShuggyCoUk
29 ianuarie 2009 в 4:15
2009-01-29T16:15:42+00:00
Mai mult
Sursă
Editează
#491544

Multe motive:

  • uint is not CLS compliant, thus making a built in type (array) dependent on it would have been problematic
  • The runtime as originally designed prohibits any object on the heap occupying more than 2GB of memory. Since the maximum sized array that would less than or equal to this limit would be new byte[int.MaxValue] it would be puzzling to people to be able to generate positive but illegal array lengths.
    • Note that this limitation has been somewhat removed in the 4.5 release, though the standard Length as int remains.
  • Historically C# inherits much of its syntax and convention from C and C++. In those arrays are simply pointer arithmetic so negative array indexing was possible (though normally illegal and dangerous). Since much existing code assumes that the array index is signed this would have been a factor
  • On a related note the use of signed integers for array indexes in C/C++ means that interop with these languages and unmanaged functions would require the use of ints in those circumstances anyway, which may confuse due to the inconsistency.
  • The BinarySearch implementation (a very useful component of many algorithms) relies on being able to use the negative range of the int to indicate that the value was not found and the location at which such a value should be inserted to maintain sorting.
  • When operating on an array it is likely that you would want to take a negative offset of an existing index. If you used an offset which would take you past the start of the array using unit then the wrap around behaviour would make your index possibly legal (in that it is positive). With an int the result would be illegal (but safe since the runtime would guard against reading invalid memory)
0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire