هل هي آمنة لإضافة المندوبين الأحداث مع كلمات جديدة ؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

شيء واحد أنا مهتم به هو أن اكتشفت طريقتين تسجيل المندوبين إلى الأحداث.

  1. OnStuff += هذا.مقبض ؛
  2. OnStuff += new StuffEventHandler(هذا.مقبض);

أول واحد هو نظيفة, وكان من المنطقي القيام "OnStuff -= هذا.مقبض;" إلغاء تسجيل من الحدث...ولكن مع هذه الحالة ، ينبغي أن أفعل "OnStuff -= new StuffEventHandler(هذا.مقبض);"?فإنه يشعر وكأنه أنا لا إزالة أي شيء على الإطلاق, منذ أنا رمي في آخر StuffEventHandler المرجعية.هل هذا الحدث مقارنة مندوب من قبل مرجع ؟ أنا قلق أنا يمكن أن تبدأ سيئة تجمع الذاكرة هنا.الحصول على لي ؟ ليس لدي إشارة إلى "جديدة StuffEventHandler" أنا مسجلة سابقا.

ما هو الجانب السلبي من القيام #1?

ما هي الفائدة من ممارسة رقم 2 ؟

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

المحلول

كنت لا داعي للقلق حول حفظ إشارة إلى الأصل مسجلة مندوب ، و لن تبدأ "سيئة تجمع الذاكرة".

عند استدعاء "OnStuff -= new StuffEventHandler(هذا.مقبض);" إزالة رمز لا لا قارن مندوب تقوم بإزالة بالإشارة:فإنه يتحقق المساواة بمقارنة الإشارات إلى الهدف الأسلوب(s) أن المندوب سيتصل, ويزيل مطابقة مندوبين من "OnStuff".

بالمناسبة "OnStuff" في حد ذاته هو كائن مندوب (الحدث الكلمة التي أفترض أن لديك في الإعلان الخاص بك ببساطة يقيد الوصول المندوب).

نصائح أخرى

رقم واحد فقط الاختزال من شأنها أن تولد نفس MSIL كما 2nd واحد في تجميع نوع سوف ننظر في هذا الأمر.والتعامل مع نستنتج مندوب مثيل.ولكن يجب أن لا إلغاء الاشتراك عن طريق استخدام جديدة.

لذلك لا يوجد فرق بين 2 فقط بعض نحوي السكر لجعل رمز النظيف.

كنت تحت انطباع أن 2 هو مجرد جملة السكر.ينبغي أن تكون بالضبط الشيء نفسه.

إذا كنت أتذكر بشكل صحيح ، البديل الأول هو مجرد النحوية السكر للمرة الثانية.

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