القيام المخصصة الخاصة بك .صافي معالجة الحدث حلقة

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

  •  03-07-2019
  •  | 
  •  

سؤال

قبل بضع سنوات, لقد قرأت الكتاب الذي وصف كيف يمكن تجاوز الحدث الافتراضي 'المرسل' التنفيذ .صافي الخاصة بك مع المعالج.

    class foo {
       public event EventHandler myEvent;
       ...
    }

    ...
      myFoo.myEvent += myBar1.EventHandler;
      myFoo.myEvent += myBar2.EventHandler;

كلما وقع حدث ، سواء myBar1 و myBar2 معالجات وسوف يطلق.

كما أذكر ، الافتراضي تنفيذ هذه الحلقة يستخدم قائمة مرتبطة ببساطة تتكرر على قائمة ويدعو EventHandler المندوبين في النظام.

سؤالي هو إضعاف اثنين:

  1. لا أحد يعرف الكتاب الذي كنت تقرأ ؟
  2. لماذا تريد أن تجاوز الافتراضي تنفيذ (التي قد تكون الإجابة في الكتاب)?

تحرير:الكتاب الأول كان يشير إلى الواقع جيفري ريختر CLR عن طريق C#

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

المحلول

كان يمكن أن يكون واحدا من العديد من الكتب أو المواد على شبكة الإنترنت.

وهناك عدة أسباب لماذا قد ترغب في تغيير كيفية الأحداث الاشتراك/إلغاء اشتراكك:

  • إذا كان لديك العديد من الأحداث والتي قد لا يكون مشتركا ، قد ترغب في استخدام EventHandlerList إلى خفض استخدام الذاكرة الخاصة بك
  • قد ترغب في تسجيل الاشتراك/إلغاء الاشتراك
  • قد ترغب في استخدام ضعف الإشارة إلى تجنب المشترك العمر من ربط لك
  • قد ترغب في تغيير قفل المرتبطة الاشتراك/إلغاء الاشتراك

أنا متأكد من أن هناك المزيد من تلك قبالة الجزء العلوي من رأسي :)

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

نصائح أخرى

أتذكر شيئا من هذا القبيل في جيفري ريختر CLR عن طريق C#. تحرير: أنا بالتأكيد لا تذكر أن يذهب في التفاصيل حول هذا الموضوع.

هناك بضعة أسباب مختلفة السيطرة على تسجيل الحدث.واحد منهم هو تقليل رمز سخام عندما كنت قد حصلت على طن من الأحداث.أعتقد جيفري ذهب إلى هذا بالتفصيل في الكتاب...

  1. لا
  2. أنت على سبيل المثال ، قد تحتاج إلى كسر استدعاء سلسلة استنادا إلى نتيجة واحدة من معالجات.يقول CustomEventArgs كائن له خاصية 'المحظورة' ، والتي عند تعيين إلى true يقمع كل معالج الحدث الدعاء.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top