كيف يعمل المندوبون والإجراءات والوظائف في C ؟

جدول المحتويات:

كيف يعمل المندوبون والإجراءات والوظائف في C ؟
كيف يعمل المندوبون والإجراءات والوظائف في C ؟
Anonim

المندوبين ، والإجراءات ، و Funcs جميع أنواع Cتركز على مفهوم مشابه: تخزين المراجع في متغير للوظائف والطرق ، والتي يمكن استدعاؤها لاحقًا لتنفيذ الطريقة التي تشير إليها. سنناقش الاختلافات بين الأنواع المختلفة وكيفية استخدامها.

ما هي المندوبين؟

المندوبون هم في الأساس مؤشرات من النوع الآمن للوظائف. المفوض هو مجرد متغير ، يشير إلى طريقة وتنفيذ "مفوض" لها. يمكن تسمية الطريقة التي تشير إليها ، مثل طريقة عضو الفئة ، أو مجهولة ، مثل وظائف الأسهم.

يتكون المندوبون من جزأين رئيسيين: تعريف النوع والتنفيذ. يضمن تعريف النوع أمان النوع ، لذلك إذا كنت تريد فقط قبول طريقة تأخذ سلسلة

وترجع منطقيًا ، فستحتاج إلى تعريفها كدالة عادية ، ما عدا مع

مندوبمعلمة ولا يوجد رمز فعلي.

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

تنفيذ برمز
تنفيذ برمز

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

يبحث وقت تشغيل. NET في الطريقة التي يشير إليها المفوض ويستدعيها
يبحث وقت تشغيل. NET في الطريقة التي يشير إليها المفوض ويستدعيها

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

لا يحتاج المندوبون إلى الإشارة إلى الأساليب المسماة رغم ذلك ، لأنها أكثر فائدة عند الإشارة إلى وظائف مجهولة. يتم إنشاؤها باستخدام صيغة دالة السهم ،

()=> {}، والتي تحدد وظيفة بدون اسم ، ومن ثم "مجهول". يمكنك استخدام هؤلاء تمامًا مثل المندوبين العاديين.

مفوض يشير إلى وظيفة مجهولة
مفوض يشير إلى وظيفة مجهولة

Actions and Funcs هي مجرد مفوضين مع وسيطات محددة ومعلمات إرجاع. يمكن أن تأخذ الإجراءات أي قدر من الوسائط ولكنها تُرجع

void. يمكن أن تأخذ Funcs أي قدر من الوسيطات ، لكنها تُرجع دائمًا قيمة محددة بواسطة معلمة النوع الأخير.

حقًا ، هذه مجرد تعريفات مفوضين معدة مسبقًا من النوع العام

T

.

Action

بدون أي أنواع هو حرفيا مجرد تعريف مفوض فارغ مع نوع إرجاع

void.

الإجراء بدون أي أنواع هو تعريف مفوض فارغ بنوع إرجاع فارغ
الإجراء بدون أي أنواع هو تعريف مفوض فارغ بنوع إرجاع فارغ

ربما تكون قد استخدمت Funcs كثيرًا دون التفكير في الأمر. إنها الوظائف التي تمررها إلى الاستعلامات المعدودة مثل

Where ()

لتحديد العناصر. يشار إلى هذه الأنواع من Funcs على وجه الخصوص بالمسندات ، و

Predicate

مكافئ وظيفيًا لكتابة

Funcفهي ليست مميزة حقًا بخلاف امتلاكها اسم محدد رغم ذلك.

يمكنك في الواقع تعريف

Func

بدقة ، وتعيين وظيفة لها كقيمة ، وتمريرها إلى

. حيث ()، الذي يبدو مزعجًا بشكل غريب نظرًا لأنك تفعل ذلك عادةً بشكل مضمّن بدون النوع أو تعريف المتغير ، لكنه صالح تمامًا:

قم بتعريف Func ، وقم بتعيينه وظيفة كقيمة ، وقم بتمريره إلى. Where (). class=imgchk9 alignnone wp-image-6413 الحجم الكامل
قم بتعريف Func ، وقم بتعيينه وظيفة كقيمة ، وقم بتمريره إلى. Where (). class=imgchk9 alignnone wp-image-6413 الحجم الكامل

يمكنك تحديد

بشكل صارم

بدلاً من

Func<int ، bool، لكن بعض الوظائف تريد على وجه التحديد واحدة أو أخرى ، وليس هناك التحويل الضمني بين الاثنين للأسف

لدى المندوبين بعض الخصائص الأخرى المثيرة للاهتمام. نظرًا لأنها مجرد متغيرات ، يمكنك تخزينها في قوائم وقواميس مثل أي نوع مرجعي آخر. يمكنك تكرار جميع المندوبين في القائمة ، واستدعاء كل واحد بدوره.

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

Hello

التي تقول مرحبًا ، و

وداعًاتقول وداعًا.

مفوض الترحيب يأخذ اسمًا ويحيي المستخدم. تم تحديد تطبيقين: Hello و Goodbye
مفوض الترحيب يأخذ اسمًا ويحيي المستخدم. تم تحديد تطبيقين: Hello و Goodbye

بعد ذلك ، يمكنك حرفياً إضافتها مع عامل علامة الجمع ، على الرغم من ملاحظة أن هذا يتوقع مفوضًا ، وليس مجموعة طريقة ، لذلك تحتاج إلى لف اسم الوظيفة بـ

مندوب جديد ليعمل بشكل صحيح. هذا المفوض المشترك ينفذ كلا العنصرين بالترتيب الذي تمت إضافتهما بهما.

المفوض المشترك ينفذ كلا العنصرين بالترتيب الذي تمت إضافتهما بهما
المفوض المشترك ينفذ كلا العنصرين بالترتيب الذي تمت إضافتهما بهما

يمكنك طرح المفوضين ، مما يزيلهم من القائمة ، على الرغم من عدم وجود عوامل الضرب لسبب ما ، ولن يكون للقسمة أي معنى هنا.

موضوع شعبي