سؤال

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

ها هي وظيفتي:

private void InvokeEvent<TArgs>(EventHandler<TArgs> invokedevent, TArgs args) 
    where TArgs : EventArgs
    {
        EventHandler<TArgs> temp = invokedevent;
        if (temp != null)
        {
            temp(this, args);
        }
    }

وهنا هو السطر لاستدعاء الوظيفة:

InvokeEvent(AfterInteraction, result);

هذا يجمع دون مشكلة ، وحتى يعرض Intellisense المكالمة "الصحيحة" (مع الجزء).

هل هذه ميزة برنامج التحويل البرمجي (يمكن استنتاج النوع العام ، في الواقع ، مباشرة من الوسيطة الثانية) ، أو هل سأجنون شيئًا وأفتقد هذه النقطة؟

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

المحلول

إذا تمكن المترجم في هذه الحالة يمكن أن يستنتج TArgs من المعلمة الثانية.

ولكن إذا لم يستطع الاستنتاج الكل اكتب المعلمات ، تحتاج إلى تحديدها جميعًا ، حتى تلك التي يمكن أن يستنتجها المترجم.

نصائح أخرى

إنه استنتاج نوع المكالمة ، اقرأ عنه هنا, ، ابحث عن الفصل "الاستدلال"

كما قلت أن المترجم قد استنتج من النوع من الحجة الثانية.

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