.net البدائية ونوع التسلسلات الهرمية، لماذا تم تصميمه مثل هذا؟

StackOverflow https://stackoverflow.com/questions/1678068

  •  16-09-2019
  •  | 
  •  

سؤال

أود أن أفهم لماذا على .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 مصممة مثل هذا؟ هل سيكون الإطار الجديد "أوسلو" آخر؟

alt text

هل كانت مفيدة؟

المحلول

سيكون تخميني لأن الأجهزة الأساسية يكسر التسلسل الهرمي للفئة. هناك (ربما من المستغرب) عدة مرات عندما تهتم بذلك 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؛)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top