هل يمكنني تغيير كيفية حل الأنواع وإنشاء مثيل لها في .NET؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

أنا أستخدم مُسلسلًا يقرأ في ملف يستند إلى XML وينشئ مثيلاً للأنواع الموضحة داخله.ليس لدي أي سيطرة على المُسلسِل، لكني أرغب في التفاعل مع العملية، ونأمل أن لا أكتب مضيف نطاق التطبيق الخاص بي.

من فضلك لا تقترح طرق التسلسل البديلة.

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

المحلول

يمكنك إرفاق معالج حدث بـ AppDomain.CurrentDomain.AssemblyResolve للمشاركة في العملية.

يجب أن يقوم EventHandler الخاص بك بإرجاع التجميع المسؤول عن النوع الذي تم تمريره في ResolveEventArgs.

يمكنك قراءة المزيد عنها في MSDN

نصائح أخرى

هناك أيضا AppDomain.TypeResolve الحدث الذي يمكنك تجاوزه.

التحديد غير مكسور يناقش كيفية النظر إلى الأمر بشكل مختلف - قد يكون الخطأ في تصميمك وليس في أدواتك.

أعتقد أن محاولة الحصول على "جديد" للقيام بشيء آخر سيكون أسلوبًا خاطئًا.

فكر في سبب ضرورة استخدام التحميل الزائد للمشغل بحذر - فهو أمر غير بديهي ويصعب تصحيحه عندما تكون هناك تغييرات مخفية في دلالات اللغة.

عد إلى الوراء وانظر إلى التصميم في سياق أكبر، وحاول العثور على طريقة أكثر عقلانية لحل المشكلة.

يجب عليك التحقق من الانعكاس وفئة المنشط.سوف تسمح لك بإنشاء كائنات من السلاسل.من المؤكد أن الكائن يجب أن يكون موجودًا في إحدى التجميعات التي يمكنك الوصول إليها.

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