كيف يمكنني الاقتراب من الأنواع المرجعية غير القابلة للفرق في C# اليوم؟
-
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)