Domanda

Vorrei capire perché il .NET ci sono nove tipi interi: Char, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64 e UInt64; più altri tipi numerici: Single, Double, Decimal; e tutti questi tipi non hanno alcuna relazione a tutti.

Quando ho iniziato la codifica in C # ho pensato "fresco, c'è un tipo di uint, ho intenzione di utilizzare che quando i valori negativi non sono ammessi". Poi realizzai alcuna API utilizzato uint ma int invece, e che uint non deriva da int, quindi era necessaria una conversione.

Quali sono l'applicazione reale mondo di questi tipi? Perché non hanno, invece, integer e positiveInteger? Questi sono i tipi che posso capire. L'età di una persona in anni è un positiveInteger, e dal momento che positiveInteger è un sottoinsieme di integer c'è così bisogno di conversione ogni volta che si prevede integer.

Il seguente è un diagramma della gerarchia tipo in XPath 2.0 e XQuery 1.0. Se si guarda sotto xs:anyAtomicType è possibile vedere la gerarchia numerica decimal> integer> long> int> short> byte. Perché non è stato .NET progettato come questo? Sarà il nuovo quadro "Oslo" dovrebbe essere diverso?

alt text

È stato utile?

Soluzione

La mia ipotesi è perché l'hardware sottostante rompe quella gerarchia di classe. Ci sono (forse sorprendentemente) molte volte quando si cura che un UInt32 è un 4 byte grande e non firmato, quindi un UInt32 non è una sorta di Int32, né è un Int32 un tipo di Int64.

E che ti interessano quasi sempre circa la differenza tra un int e float.

In sostanza, l'ereditarietà e la gerarchia di classe non sono gli stessi set di inclusione matematica. Il fatto che i valori di UInt32 può contenere sono un sottoinsieme rigoroso dei valori una Int64 può contenere non significa che un UInt32 è un tipo di Int64. Meno ovviamente, un Int32 non è un tipo di Int64 - anche se non c'è alcuna differenza concettuale tra loro, le loro rappresentazioni sottostanti sono differenti (4 byte contro 8 byte). Decimals sono ancora più diverso.

XPath è diverso: le rappresentazioni per tutti i tipi numerici sono fondamentalmente gli stessi - una stringa di cifre ASCII. Lì, la differenza tra un short e long è uno dei possibile gamma piuttosto che la rappresentazione -. "123" è sia una rappresentazione valida di una short e una rappresentazione valida di una long con lo stesso valore

Altri suggerimenti

decimale è destinato per i calcoli che hanno bisogno di precisione (in pratica, il denaro). Vedi qui: http://msdn.microsoft.com/ it-it / library / 364x0z75 (VS.80) aspx

singole / doppie sono diversi per decimali, perché sono destinati ad essere un'approssimazione (in pratica, per i calcoli scientifici).

È per questo che non sono correlati.

Per quanto riguarda i byte e caratteri, sono totalmente diversi: un byte è 0-255, mentre un char è un personaggio, e può quindi memorizzare i caratteri Unicode (ci sono molto di più di 255 di loro)

uints e interi non convertire automaticamente, perché possono ciascuno memorizzare i valori che sono impossibili per gli altri (uints avere il doppio della portata positiva di int).

Una volta a ottenere il blocco di tutto, lo fa effettivamente fare un sacco di senso.

Per quanto riguarda la tua età cosa, mi piacerebbe semplicemente utilizzare un int;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top