سؤال

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

protected virtual OnSomethingHappened()
{
    this.SomethingHappened(this, EventArgs.Empty);
}

ويجب أن يكون البريد EventArgs.Empty إذا لم تكن هناك وسائط الحدث مثيرة للاهتمام، وليس لاغية.

ولقد اتبعت الإرشادات الواردة في قانون بلدي، ولكن أدركت أنني لست واضحة عن السبب في هذا هو الأسلوب المفضل. لماذا عقد ذكر يفضلون EventArgs.Empty على باطل؟

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

المحلول

وأعتقد أن السبب وراء NOT NULL هو أنه عندما تم تمريره كمعلمة، لا يتوقع ذلك للأسلوب يحتاج إلى أن يحتمل التعامل مع استثناء مرجع فارغة.

إذا كنت تمر لاغية، وتحاول طريقة لفعل شيء مع البريد وسوف تحصل على استثناء مرجع فارغة، مع EventArgs.Empty أنها لن تفعل ذلك.

نصائح أخرى

وEventArgs.Empty هو مثيل خالية نمط الكائن .

وأساسا، وجود وجوه تمثل "لا قيمة" لتجنب التحقق من وجود لاغية عند استخدامه.

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

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

.

وEventArgs.Empty لا أساسا من عمل حجة الحدث محددة عالميا مع أي معلومات إضافية.

لإعطاء مثال مشابه الحفاظ على اتفاقية يستخدم فريقنا string.Empty تهيئة سلسلة لأن خلاف ذلك المبرمجون مختلفة قد تستخدم newString = ""; or newString = " "; or newString = null;، والتي قد تسفر عن نتائج مختلفة عن شروط الاختيار مختلفة.

وA (متحذلق قليلا) سبب لاستخدام EventArgs.Empty مقابل new EventArgs() هو أن الأولى لا تهيئة EventArgs جديدة، وتوفير كمية ضئيلة من الذاكرة.

إذا كنت تستخدم طريقة للأغراض العامة والتي لديها توقيع EventHandler وهذا يسمى من أي معالج الحدث ويتم تمرير كل من object sender و <م> EventArgs e ، فإنه يمكن استدعاء e.ToString()، على سبيل المثال، لتسجيل الأحداث، دون الحاجة إلى القلق حول استثناء مؤشر فارغة.

واعتدت منذ فترة طويلة "EventArgs جديدة ()" بدلا من "EventArgs.Empty" ... أعتقد أن المهم هو لتمرير شيء ما لن يسبب استثناء خالية.

ومن Albahari كتاب: "in order to avoid unnecessarily instantiating an instance of EventArgs."

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