هل تتصرف التآكل التلقائي والملابس بشكل مختلف في Java و C#

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

  •  22-09-2019
  •  | 
  •  

سؤال

أقوم بتحويل التعليمات البرمجية يدويًا من Java (1.6) إلى C# وأجد بعض الصعوبة في سلوك البدائل (int و double). في C# يبدو أن جميع التحويلات تحدث تلقائيًا تقريبًا

        List<double> list1 = new List<double>();  // legal, C#
        double d0 = 3.0;
        list1.Add(d0);                            // legal, C#
        Double dd = 2.3f;                         // legal, C#
        list1.Add(dd);                            // legal, C#
        List<Double> list2 = new List<Double>();  // legal, C#
        double d1 = 3.0;
        list2.Add(d1);                            // legal, C#
        list2.Add(2.0);                           // legal, C#
        double d2 = list2.get(0);                 // legal, C#

لكن في جافا مسموح ببعضها فقط

        List<double> list1 = new ArrayList<double>();  // illegal, Java
        List<Double> list2 = new ArrayList<Double>();  // legal, Java
        double d1 = 3.0;
        list2.add(d1);                                 // legal, Java
        list2.add(2.0);                                // legal, Java
        double d2 = list2.get(0);                      // legal, Java

سأكون ممتنًا لتحليل منهجي للاختلافات وأي الأساس المنطقي الأساسي.

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

المحلول

في مثال C# ، لا يوجد ملاكمة أو إلغاء التفاح (و Autoboxing). double هو مجرد الاسم المستعار ل struct Double.

في جافا ، الملاكمة ضرورية. بسبب اكتب المحو, ، لا يمكنك إنشاء ملف List<double>, ، فقط List<Double>. في وقت الترجمة ، List<?> يصبح List<Object> وستحتاج الملاكمة/إلغاء اللاصطناب إلى حدوثها حتى تتمكن من إضافة متغير من النوع الأصلي إلى أ List<Object> أو تعيين متغير أصلي لعنصر القائمة.

نصائح أخرى

في C#، double و Double نكون بالضبط نفس الشيء (طالما أنك لم تنشئ نوعك الخاص المسمى Double, ، والتي ستكون غبية).

double هو يعرف كمستعار ل global::System.Double. على هذا النحو ، لا يوجد ملاكمة هنا.

في جافا ، Double هو محاصر double, ، مع كون الأنواع الإرهبية جزءًا رئيسيًا من تنفيذ الأدوية الجيرية.

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