مشاركة عبر


المفوضون والأحداث

الحدث هو رسالة مُرسلة من قبل كائن للإشارة إلي وقوع إجراء. قد يحدث الإجراء بسبب تدخل المستخدم مثل النقر بالماوس، أو قد يكون يقع بواسطة منطق اَخر للبرنامج. الكائن الذي يرفع الحدث يسمى بمرسل الحدث. الكائن الذي يلتقط الحدث ويستجيب له يُسمى مُتلقي الحدث.

في اتصال الحدث، يكون مرسل الحدث هي فئة لا تعرف أي كائن أو أسلوب سوف يتلقى (يعالج) الأحداث التي سيرفعها. ما يلزم هو وسيط ما (أو آلية تشبه المؤشر) بين المصدر والمُتلقي. يعرّف .NET Framework نوع خاص ( Delegate) والذي يوفر وظائف مؤشر دالة.

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

Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
public delegate void AlarmEventHandler(Object^ sender, AlarmEventArgs^ e);

يشبه بناء الجملة مثل الذي من تعريف أسلوب; ومع ذلك، تقوم الكلمة الأساسية delegate بإعلام المحول البرمجي بأن AlarmEventHandler هو نوع مفوض. عن طريق الاصطلاح ، فمفوضين الحدث في .NET Framework لديهم معلمتين، مصدر البيانات الذي يرفع الحدث، و تاريخ للحدث.

يمكن ربط مثيل المفوض AlarmEventHandler إلي أي أسلوب يطابق التوقيع الخاصة به، مثل الأسلوب AlarmRang من الفئة WakeMeUp المُوضح في المثال التالي.

Public Class WakeMeUp
    ' AlarmRang has the same signature as AlarmEventHandler.
    Public Sub AlarmRang(sender As Object, e As AlarmEventArgs)
        '...
    End Sub
    '...
End Class
public class WakeMeUp
{
    // AlarmRang has the same signature as AlarmEventHandler.
    public void AlarmRang(object sender, AlarmEventArgs e)
    {
        //...
    }
    //...
}
public ref class WakeMeUp
{
public:
    // AlarmRang has the same signature as AlarmEventHandler.
    void AlarmRang(Object^ sender, AlarmEventArgs^ e)
    {
        //...
    }
    //...
};

مفوضين الأحداث المخصصة مطلوبين فقط عندما يقوم حدث بإنشاء بيانات الحدث. كثير من الأحداث، بما في ذلك بعض أحداث واجهة المستخدم مثل نقرات الماوس، لا تُنشئ بيانات الحدث. في مثل تلك المواقف، مفوض الحدث المتوفر في مكتبة الفئات بجون بيانات الحدث، System.EventHandler ، تكون كافية. يتبع التعريف الخاص به.

Delegate Sub EventHandler(sender As Object, e As EventArgs)
delegate void EventHandler(object sender, EventArgs e);
delegate void EventtHandler(Object^ sender, EventArgs^ e);

يتم إرسال مفوضين الحدث بشكل متعدد، الذي يعني أنها يمكن الاحتفاظ بمراجع إلي أكثر من أسلوب معالجة حدث واحد. للمزيد من التفاصيل ، راجع Delegate. يسمح المفوضين بالتحكم بمرونة و بشكل دقيق في معالجة الأحداث. المفوض يعمل كعامل مرسل حدث للفئة التي تقوم برفع الحدث عن طريق الاحتفاظ بقائمة معالجات الأحداث المسجّلة للحدث.

للحصول على تفاصيل حول استخدام التفويضات لتوفير وظائف الحدث في مكون أو عنصر تحكم، راجع رفع حدث.

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

راجع أيضًا:

المهام

كيفية القيام بما يلي: إطلاق و استهلاك الأحداث

كيفية القيام بما يلي: توصيل أساليب معالج الأحداث إلى الأحداث

المبادئ

استهلاك الأحداث

رفع حدث

موارد أخرى

معالجة ورفع الأحداث