كيف يمكنني الاقتراب من الأنواع المرجعية غير القابلة للفرق في C# اليوم؟

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

  •  24-09-2019
  •  | 
  •  

سؤال

لقد قرأت العديد من غير قابلة للفرق أسئلة وأجوبة. يبدو أن أفضل طريقة للاقتراب من الأنواع غير القابلة للفرق في C# (4.0) هي Jon Skeet غير قابلة للإلغاء <> اختراق.

ومع ذلك ، يبدو أن C ++/CLI قد حلت الكثير من المشكلة من خلال دعم المراجع المدارة: Foo% (بدلاً من C ++ الأصلي Foo&). المترجم يقوم بهذا العمل من خلال الإضافة modreq(IsImplicitlyDereferenced) إلى الحجة. محاولة استدعاء مثل هذه الوظيفة من C# النتائج في:

'<FunctionName>' is not supported by the language

هل هناك أي شيء أفضل بعد ذلك غير قابلة للإلغاء <>?

هل هناك أي طريقة (بشكل معقول-ie ، w/o باستخدام الانعكاس) استدعاء طريقة C ++/CLI Foo::Method(Bar%) من C#؟


تعديل يبدو أنه لا يوجد حاليا أفضل من غير قابلة للإلغاء <>... أتمنى لو حصلت على بعض التعليقات على الأشياء C ++/CLI لأنها لديها بالفعل حل جزئي على الأقل.

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

المحلول

لقد واجهت هذا عدة مرات ... لم أجد أي شيء أفضل من حل Skeet. لقد تم حل جميع الحالات التي صادفتها ، لذلك يجب أن أعطيها تصويتي.

أوافق على أنه من الموقف المخترق بعض الشيء الذي يتعين علينا اللجوء إلى ذلك ... لكن إصلاحه يحل المشكلة.

نصائح أخرى

نعم ، المواصفات#: http://research.microsoft.com/en-us/projects/specsharp/

- تحرير: لقد لاحظت للتو أنك قلت C# 4.0 ؛ أنا متأكد إلى حد ما المواصفات# لا تدعم هذا الإصدار. ومع ذلك ، فإنه يستحق المراجعة.

قد تكون قادرًا أيضًا (على ما أظن) على التحقق في مرحلة لاحقة قليلاً ثم تجمع ، عبر قاعدة في Gendarme: http://www.mono-project.com/gendarme (على افتراض أن العمل مقابل 4.0)

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