6

.NET に, , , , , , Char,の 9 つの整数型がある理由を理解したいと思います。その他の数値型: 、、; そして、これらすべてのタイプはまったく関係がありません。ByteSByteInt16UInt16Int32UInt32Int64UInt64SingleDoubleDecimal

初めて C# でコーディングを始めたとき、「かっこいい、uint型がある。負の値が許可されていないときにそれを使用するつもりだ」と思いました。その後、APIuintが使用されていないことに気付きましたがint、それuintは から派生したものではないintため、変換が必要でした。

これらのタイプの実際のアプリケーションは何ですか? integer代わりに、とを持たないのはなぜpositiveIntegerですか?これらは私が理解できるタイプです。ある人の年齢はpositiveIntegerであり、positiveIntegerは のサブセットでintegerあるため、期待されるたびに変換する必要がありintegerます。

以下は、XPath 2.0 と XQuery 1.0 の型階層の図です。下xs:anyAtomicTypeを見ると、数値階層decimal> integer> long> int> short>が表示されますbyte。.NET がこのように設計されなかったのはなぜですか? 新しいフレームワーク「オスロ」は何か違いますか?

代替テキスト

4

2 に答える 2

4

私の推測では、基盤となるハードウェアがそのクラス階層を壊しているためです。UInt32(おそらく驚くべきことに) aが 4 バイトの大きさで符号なしであるUInt32 ことを気にすることがよくInt32ありInt32ます Int64

intそして、ほとんどの場合、 anと aの違いを気にしfloatます。

基本的に、継承とクラス階層は数学的セットの包含と同じではありません。UInt32a が保持できる値がが保持できる値の厳密なサブセットであるという事実は、 aが の型であるInt64ことを意味しません。それほど明白ではありませんが、 an は型ではありません- それらの間に概念的な違いはありませんが、それらの基本的な表現は異なります (4 バイトと 8 バイト)。 はさらに異なります。UInt32Int64Int32Int64Decimals

XPath は異なります。すべての数値型の表現は基本的に同じで、ASCII 数字の文字列です。shortそこでは、aと aの違いは、表現ではなく可能なlong範囲の 1 つです。「123」は、a の有効な表現であり、同じ値を持つa の有効な表現でもあります。shortlong

于 2009-11-05T03:38:02.170 に答える
3

Decimal は、精度が必要な計算 (基本的には金額) を対象としています。ここを参照してください: http://msdn.microsoft.com/en-us/library/364x0z75(VS.80).aspx

単精度/倍精度は小数とは異なります。これは、概算 (基本的には科学計算用) を意図しているためです。

それが彼らが関係していない理由です。

バイトと文字に関しては、それらはまったく異なります。バイトは 0 ~ 255 ですが、文字は文字であるため、Unicode 文字を格納できます (255 以上の文字があります!)。

uint と int は自動的に変換されません。これは、それぞれが互いに不可能な値を格納できるためです (uint は int の正の範囲の 2 倍です)。

すべてのコツをつかむと、実際には非常に理にかなっています。

あなたの年齢については、単に int を使用します ;)

于 2009-11-05T03:37:37.193 に答える