.net البدائية ونوع التسلسلات الهرمية، لماذا تم تصميمه مثل هذا؟
سؤال
أود أن أفهم لماذا على .NET هناك تسعة أنواع عدد صحيح: Char
, Byte
, SByte
, Int16
, UInt16
, Int32
, UInt32
, Int64
, ، و UInt64
; ؛ بالإضافة إلى أنواع رقمية أخرى: Single
, Double
, Decimal
; ؛ وجميع هذه الأنواع ليس لها علاقة على الإطلاق.
عندما بدأت الترميز لأول مرة في C # اعتقدت "بارد، هناك uint
اكتب، سأستمر ذلك عندما لا يسمح القيم السلبية ". ثم أدركت لا API المستخدمة uint
لكن int
بدلا من ذلك، وهذا uint
غير مشتق من int
, ، لذلك هناك حاجة إلى تحويل.
ما هو تطبيق العالم الحقيقي لهذه الأنواع؟ لماذا لا يكون، بدلا من ذلك، integer
و positiveInteger
ب هذه هي أنواع يمكنني فهمها. عمر الشخص في سنوات هو positiveInteger
, ، ومنذ ذلك positiveInteger
هي مجموعة فرعية من integer
هناك حاجة لذلك لتحويل كلما integer
متوقع.
فيما يلي رسم تخطيطي لنوع التسلسل الهرمي في XPath 2.0 و xquery 1.0. إذا نظرت تحت xs:anyAtomicType
يمكنك رؤية التسلسل الهرمي الرقمي decimal
> integer
> long
> int
> short
> byte
. وبعد لماذا لم يكن .NET مصممة مثل هذا؟ هل سيكون الإطار الجديد "أوسلو" آخر؟
المحلول
سيكون تخميني لأن الأجهزة الأساسية يكسر التسلسل الهرمي للفئة. هناك (ربما من المستغرب) عدة مرات عندما تهتم بذلك UInt32
هو 4 بايت كبيرة وغير موقعة، لذلك UInt32
ليس نوع من Int32
, ، وليس Int32
نوع من Int64
.
وأنت دائما تهتم دائما بالفرق بين int
و float
.
في الأساس، الميراث والتسلسل الهرمي للفئة ليست هي نفس إدراج الرياضيات. حقيقة أن القيم أ UInt32
يمكن أن تعقد مجموعة فرعية صارمة من القيم Int64
يمكن أن تعقد لا يعني ذلك UInt32
هو نوع من Int64
. وبعد أقل بوضوح، Int32
ليس نوعا من Int64
- على الرغم من عدم وجود فرق مفاهيمي بينهما، فإن تمثيلاتها الأساسية مختلفة (4 بايت مقابل 8 بايت). Decimals
هي أكثر اختلافا.
XPath مختلفة: تمثيل جميع الأنواع الرقمية هي نفسها بشكل أساسي - سلسلة من أرقام ASCII. هناك، الفرق بين short
و long
هو واحد من المستطاع مجموعة بدلا من التمثيل - "123" هو تمثيل صالح ل short
وتمثيل صالح ل long
بنفس القيمة.
نصائح أخرى
العشرية مخصصة للحسابات التي تحتاج الدقة (أساسا، المال). انظر هنا: http://msdn.microsoft.com/en-us/library/364x0z75(vs.80).aspx.
الكلية / الزوجي تختلف عن الكسور العشرية، لأنها تهدف إلى أن تكون تقريبية (أساسا، للحسابات العلمية).
لهذا السبب لا ترتبط.
بالنسبة إلى البايتات والأحرف، فهي مختلفة تماما: بايت هو 0-255، في حين أن شار هو شخصية، وبالتالي يمكن تخزين أحرف Unicode (هناك أكثر بكثير من 255 منها!)
لا تتحول Auints و Intts تلقائيا، لأنها يمكن أن تكون كل قيم متجر مستحيلة للآخر (uints لديها ضعف النطاق الإيجابي للمجلس الدولي).
بمجرد أن تحصل على تعليق كل شيء، فإنه فعلا إحساسا كبيرا.
أما بالنسبة لعملك، فستستخدم ببساطة INT؛)