سؤال

لقد تم تطوير تطبيقات .NET لمدة 4 سنوات. حتى الآن ، لم أكن بحاجة إلى إنشاء أي تحويلات ضمنية للفئات التي قمت بتأليفها.
هل يمكن أن تقدم مواقف واقعية عندما لا تستطيع أن تفعل دون إنشاء تحويلات ضمنية؟

شكرًا لك

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

المحلول

يجب تحديد التحويلات الضمنية فقط عندما يمكن تحويل النوع إلى أو من (يفضل إلى ذلك و من) نوع آخر مع لا خسارة البيانات. معيار آخر هو أن التحويلات الضمنية يجب أن تكون غير مكلفة إلى حد ما ، لأن المطور الذي يستخدم فصلك ربما لن يكون على دراية عندما تحدث التحويلات الضمنية.

مثال واحد: التحويل بين أنظمة الإحداثيات. على سبيل المثال ، قد يكون متجه الإحداثيات القطبية التي يمكن أن تتحول إلى إحداثيات الديكارتية مريحة. ومع ذلك ، نظرًا للنقطة العائمة ، سيكون من الأفضل ترك هذا كتحويل صريح بحيث يتعين على المبرمج أن يطغى على التحويل.

قد يكون هناك ما يبرر التحويل الضمني إذا كان لديك نوعان من البيانات يقومان بتخزين البيانات بنفس التنسيق ولكن التمييز الوحيد بين الأنواع هو الدلالي - كيف يتم استخدامهما أو ما تعنيه. مثال على العالم الحقيقي: التحويل بين أنواع بيانات وقت البيانات التي لها نفس التمثيل (أو متوافق) من التمثيل الأساسي ولكنها تختلف فقط في تاريخ بدء EPOC. ستجد هذه عند ترحيل أحواض الكود الأقدم إلى أطر أحدث حيث يحدد كلاهما نوع DateTime لكن الدلالات مختلفة قليلاً. من المحتمل أن يكون التحويل الضمني هنا (على افتراض عدم وجود فقدان للبيانات على الإطلاق) على ما يرام وفكرة جيدة.

إذا كان لديك مجموعة من الأنواع وقمت بتعريف قواعدك الخاصة لكيفية تحويل الأنواع بين بعضها البعض ، فقد تكون بعض هذه التحويلات ضمنية وبعضها صريح اعتمادًا على "شدة" التحويل. كانت الحالة الأساسية للمكان الذي استخدمت فيه التحويل الضمني عند تطبيق الفصل في .NET عندما كنت أقوم بتنفيذ دلالات وين32 متغير لمكتبة وقت تشغيل دلفي. تحدد Win32 ولغة Delphi عددًا من التحويلات على البيانات المتغيرة التي يمكن القيام بها.

إنك لم تجد حاجة لإنشاء تحويلات ضمنية أمر جيد في الواقع. فقط لأنك لا تعني أنه يجب عليك. توجد تحويلات ضمنية في .NET في المقام الأول للسماح لغات البرمجة المختلفة بتمثيل دلالاتها بطريقة يجب أن تكون قابلة للتشغيل البيني ومفهومة بواسطة لغات .NET أخرى.

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