سؤال

وأنا في حيرة من بناء الجملة من أجل إزالة معالجات الأحداث في C #.

Something += new MyHandler(HandleSomething); // add
Something -= new MyHandler(HandleSomething); // remove

و"الجديد" بإنشاء كائن جديد في كل سطر، لذلك قمت بإضافة كائن واحد ثم نسأل لإزالة كائن آخر.

وماذا يحدث في الواقع تحت الأغطية أن هذا يمكن أن تعمل منتديات ومن المؤكد ليس من الواضح من بناء الجملة.

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

المحلول

وو+ = و- = اختصارات بناء الجملة من أجل إضافة المدمج في طرق الداخلية المسماة ()، وإزالة ()، الذي إضافة أو إزالة مؤشر إلى قائمة مرتبطة الداخلية المندوبين أن مندوب له كحقل الخاص . عند تشغيل إزالة، ويبدأ على رأس القائمة المرتبطة ويدرس كل مندوب في لائحة واحدة في وقت واحد حتى يجدها واحد هو أن "على قدم المساواة" إلى الشخص الذي تم تمريره إلى أسلوب إزالة (). (باستخدام - = جملة)

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

في هذا السياق، يتم تجاوز أسلوب "متساوين" (لمندوب ()) بحيث يقارن فقط هدفا للمندوب، وmethodPtr، والتي سوف تكون هي نفسها حتى ولو كنت قد خلقت مندوب جديد ل تمرير إلى إزالة ...

نصائح أخرى

وو"MyHandler الجديد" لا لزوم لها في الواقع. يمكنك أن تفعل ببساطة

Something += HandleSomething; // add
Something -= HandleSomething; // remove

وكافة الأحداث في C # هي المندوبين المتعدد، وبالتالي فإن + = و- = جملة يدل على أنك إضافة / إزالة مندوبة إلى قائمة المندوبين من شأنها أن يسمى

وأما ما يجري وراء الكواليس، وأفضل تفسير التي وجدتها هو جون السكيت في .

ويمكنك التفكير في الأحداث وسائل نائب لمنطق تفويض الذي ينفذ عندما يتم رفع الحدث. يمكن أن يكون هناك حدث واحد عدة مشتركين (متعدد الصب)، وبالتالي فإن + = و- = جملة هي الطريقة التي يتم إرفاق معالج حدث واحد أو إزالتها. ببساطة القيام الاحالة أن إعادة تعيين الاشتراكات الحدث، الذي يمكن أن يسبب التأثيرات الجانبية غير المرغوبة.

وتحرير: هذا الرابط يشرح المزيد عن الفروسية في C #

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