سؤال

ما هي بعض الأماكن في العالم الحقيقي التي تدعو المندوبين؟أشعر بالفضول بشأن المواقف أو الأنماط الموجودة حيث تكون هذه الطريقة هي الحل الأفضل.لا يوجد رمز مطلوب.

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

المحلول

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

بناءً على هذا البيان، يكون المفوض بمثابة مؤشر دالة وهو يحدد الشكل الذي تبدو عليه هذه الوظيفة.

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

نصائح أخرى

كما جاء في "تعلم لغة C#3.0:إتقان أساسيات C#3.0"

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

يحدد الرئيس مسبقًا المسؤولية التي سيتم تفويضها (حضور الجنازة) ، وما هي المعلمات التي سيتم تمريرها (التعازي ، والكلمات الرقيقة) ، والقيمة التي يأمل في العودة (حسن النية).ثم يقوم بتعيين شخص معين لتلك المسؤولية المفوضة في "وقت التشغيل" مع تقدم رئاسته.

في سيناريو البرمجة: غالبًا ما تواجه المواقف التي تحتاج فيها إلى تنفيذ إجراء معين ، لكنك لا تعرف مسبقًا الطريقة ، أو حتى أي كائن ، ستحتاج إلى الاتصال بتنفيذها.

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

أحد الاستخدامات الشائعة للمفوضين للقوائم العامة هو عبر مفوضي الإجراء (أو ما يعادله المجهول) لإنشاء عملية foreach من سطر واحد:

myList.Foreach( i => i.DoSomething());

أجد أيضًا مندوب المسند مفيدًا جدًا في البحث عن القائمة أو تقليمها:

myList.FindAll( i => i.Name == "Bob");    
myList.RemoveAll( i => i.Name == "Bob");

أعلم أنك قلت أنه لا يلزم وجود رمز، ولكن أجد أنه من الأسهل التعبير عن فائدته عبر الكود.:)

عادةً ما يكون ربط الأحداث بمعالجات الأحداث هو أول مقدمة لك للمفوضين... ربما لا تعرف حتى أنك كنت تستخدمها لأن المفوض مندمج في فئة EventHandler.

إذا كنت مهتمًا بمعرفة كيفية استخدام نمط المندوب في التعليمات البرمجية الواقعية، فلا تبحث سوى عن Cocoa على نظام التشغيل Mac OS X.Cocoa هي مجموعة أدوات واجهة المستخدم المفضلة لشركة Apple للبرمجة ضمن نظام التشغيل Mac OS X، ويتم ترميزها في Objective C.لقد تم تصميمه بحيث يتم توسيع كل مكون من مكونات واجهة المستخدم عبر التفويض بدلاً من التصنيف الفرعي أو وسائل أخرى.

لمزيد من المعلومات، أوصي بمراجعة ما تقوله Apple عن المندوبين هنا.

كان لدي مشروع يستخدم win32 Python.

لأسباب مختلفة، استخدمت بعض الوحدات odbc.py للوصول إلى قاعدة البيانات، ووحدات أخرى - pyodbc.py.

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

وذلك لأن odbc.py توقع، كقيم في عبارات SQL، التواريخ كـ dbi.dbiDate بينما توقع pyodbc.py قيم التاريخ والوقت.

وكان أحد المضاعفات الأخرى هو أن كائنات الاتصال التي تم إنشاؤها بواسطة odbc.py وpyodbc.py لم تسمح لأحد بتعيين حقول إضافية.

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

كان لدي نفس سؤالك وذهبت إلى هذا الموقع للحصول على إجابة.

على ما يبدو، لم أفهم الأمر بشكل أفضل على الرغم من أنني قمت بتصفح الأمثلة الموجودة في هذا الموضوع.

لقد وجدت فائدة كبيرة للمندوبين الآن بعد أن قرأت: http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx

قد يبدو هذا أكثر وضوحًا للمستخدمين الجدد لأن النماذج أكثر تعقيدًا في تمرير القيم من مواقع ASP.NET التي تستخدم POST/GET (QueryString).

في الأساس تقوم بتحديد المندوب الذي يأخذ "مربع الكتابة نص" كمعلمات.

// النموذج1

// Class Property Definition
public delegate void delPassData(TextBox text);


// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
     Form2 frm= new Form2();
     delPassData del=new delPassData(frm.funData);
     del(this.textBox1);
     frm.Show();
}

// ملخص:حدد المفوض، وقم بإنشاء فئة Form2 جديدة، وقم بتعيين وظيفة funData () للتفويض، وقم بتمرير مربع النص الخاص بك إلى المفوض.إظهار النموذج.

// النموذج2

public void passData(TextBox txtForm1)
{

     label1.Text = txtForm1.Text;
}

// ملخص:ما عليك سوى استخدام TextBox txtForm1 كمعلمات (كما هو محدد في مندوبك) وتعيين نص التسمية لنص textBox.

آمل أن ينير هذا بعض الاستخدام على المندوبين :) ..

بحث سريع في جوجل توصل إلى هذا http://en.wikipedia.org/wiki/Delegation_pattern .بشكل أساسي، في أي وقت تستخدم فيه كائنًا يقوم بإعادة توجيه مكالماته إلى كائن آخر، فأنت تقوم بالتفويض.

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