سؤال

في C#، ما هو الفرق (إن وجد) بين هذين السطرين من التعليمات البرمجية؟

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

و

tmrMain.Elapsed += tmrMain_Tick;

يبدو أن كلاهما يعملان بنفس الطريقة تمامًا.هل تفترض C# أنك تقصد الأول عندما تكتب الأخير؟

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

المحلول

انا فعلت هذا

static void Hook1()
{
    someEvent += new EventHandler( Program_someEvent );
}

static void Hook2()
{
    someEvent += Program_someEvent;
}

ثم ركض ildasm على الكود.
كان MSIL الذي تم إنشاؤه هو نفسه تمامًا.

لذا، للإجابة على سؤالك، نعم هما نفس الشيء.
المترجم يستنتج فقط ما تريد someEvent += new EventHandler( Program_someEvent );
- يمكنك أن ترى أنه يخلق الجديد EventHandler كائن في كلتا الحالتين في MSIL

نصائح أخرى

كان من المعتاد (أيام ‎.NET 1.x) أن يكون النموذج الطويل هو الطريقة الوحيدة للقيام بذلك.في كلتا الحالتين، تقوم بتجديد مفوض للإشارة إلى الأسلوب Program_someEvent.

لا أعتقد أن هناك أي فرق.من المؤكد أن resharper يقول أن السطر الأول يحتوي على كود زائد عن الحاجة.

خارج الموضوع قليلاً :

يمكنك إنشاء مثيل للمفوض (new EventHandler(MethodName)) و (إذا كان ذلك مناسبًا) إعادة استخدام هذا المثيل.

لم يكن new XYZEventHandler تتطلب حتى C#2003، وتم السماح لك بحذف الكود الزائد في C#2005؟

أعتقد أن الطريقة الوحيدة لمعرفة ذلك هي إلقاء نظرة على MSIL المنتج للكود.يميل إلى أن يكون اختبار حمض جيد.

لدي مخاوف مضحكة من أنه قد يعبث بطريقة أو بأخرى مع GC ..يبدو غريبًا أنه سيكون هناك كل العبء الزائد للإعلان عن نوع المفوض الجديد إذا لم تكن هناك حاجة إلى القيام به بهذه الطريقة، هل تعلم؟

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