سؤال

شيء لا أفهمه، أفهم أن هناك اختلافات بين C# وVB.NET (أساسًا في استخدام المؤشرات) ولكن لماذا إذا كان كلاهما يحتوي على CLR مشترك، فهل يعمل XNA (على سبيل المثال) فقط مع C# وليس VB .NET، أم أن الوظائف الإضافية إلى الاستوديو المرئي كانت موجهة إلى C# بدلاً من VB.Net، وفي الواقع تعمل ملحقات اللغة في كليهما

آسف إذا كان سؤالًا واضحًا، اعتقدت أنني سأطرحه

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

المحلول

لقد تم نقل CLR إلى منصات مختلفة، وليست جميعها متساوية.جهاز Xbox 360 CLR، على سبيل المثال، لا يحتوي على Reflection.Emit أو حتى جميع عمليات IL التي يقوم بها CLR الكامل.وبالتالي، قد يقوم مترجم مختلف بإصدار رموز IL التي تعتبر قانونية على CLR الكامل، ولكنها غير قانونية على Compact CLR.

المشكلة الأخرى هي توفر المكتبات الصفية.يتضمن BCL الكامل Microsoft.VisualBasic مساحة الاسم، والتي يتم الرجوع إليها تلقائيًا بواسطة برنامج التحويل البرمجي VB.NET.يحتوي هذا التوافق مع VB6 الوظائف، مساحة الاسم الخاصة بي الميزات، وكذلك بعض وظائف مساعد المترجم, ، ويشار إليه عادةً باسم وقت تشغيل VB.NET.

عندما يتم نقل CLR، يتم نقل تجميعات معينة - ولا يتم نقل مجموعات أخرى.بالنسبة لأجهزة XBox، لم يتم نقل Microsoft.VisualBasic.هذا يعني أنه لا يمكنك الرجوع إلى أي شيء من مساحة الاسم تلك.في حين أنه من السهل إلى حد ما عدم الإشارة إلى التوافق أو مساحات الأسماء الخاصة بي، إلا أنه يمكن إدراج خدمات المترجم في IL المترجمة دون الاتصال بها بشكل صريح.

في VB.NET 8، يمكنك تمرير ملف غير موثقة وغير مدعومة -novbruntimeref قم بالتبديل إلى vbc.exe لمنعه من الرجوع إلى Microsoft.VisualBasic.dll.لسوء الحظ، قد يؤدي هذا أحيانًا إلى حدوث أخطاء غريبة في المترجم.في VB.NET 9، أصبح تم توثيقه ودعمه وإعادة تسميته إلى /vbruntime.

الحالة الثالثة هي الوظائف الإضافية ودعم Visual Studio.هذا الأمر متروك للحزم الفردية، فيما يتعلق بما إذا كانت تدعم القوالب أو إنشاء الأكواد وما إلى ذلك.لكل لغة.أعتقد أن بعض الجهات الخارجية قد أصدرت قوالب VB.NET لـ XNA إنه غير مدعوم رسميًا.

أعتقد أن خلاصة القول هي أنها مزيج من الاهتمامات الفنية (منافذ CLR، وتوافر BCL، ومخرجات IL للمترجم) والدعم (الاختبار، والتمويل، والوظائف الإضافية للغات الأخرى).

نصائح أخرى

وانها مجموعة أداة يحدد دعم اللغة. XNA، على سبيل المثال، ببساطة فعل كل عملهم مع C # و شحنها فقط الدعم له. هل يمكن الاستمرار في كتابة التطبيق في VB.NET يدويا وترجمة ذلك من سطر الأوامر. طالما التطبيق لم تجميع وصولا الى أي غير القانونية IL (أكواد العمليات التي لا تدعم XNA) سوف لا تزال تعمل. القضية الأساسية هي الموارد - ليس لديهم القوة البشرية للقيام التنمية الكاملة واختبار جميع اللغات، ولذلك اختار واحدة

ومن كل حسابات VB.NET و C # و99.9999 تعادل عندما يتعلق الأمر CLR. ولكن هناك بعض الاختلافات الطفيفة التي قد دغة لك. في ادايشن أذكر أني قرأت في بعض بلوق مايكروسوفت أن هناك بعض الأشياء التي يمكن القيام به CLR التي لا (حتى الآن) للبرمجة إما عن طريق VB.NET أو C #، ويجب أن يتم ذلك عن طريق IL. مثيرة للاهتمام حقا.

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