Latest web development tutorials

C # مندوب (مندوب)

C # مدير (مندوب) على غرار C أو C ++ مؤشر دالة.مدير (مندوب) هناك طريقة لنوع مرجع المراجع المتغيرة.يمكن تغيير إشارة في وقت التشغيل.

الرئيسي (مندوب) المعدة خصيصا للأحداث وطرق الاستدعاء. وتستمد كل مندوب (مندوب) من الدرجةSystem.Delegate.

بيان لجنة (مندوب)

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

على سبيل المثال، لنفترض أن لديك مندوب:

مندوب العام كثافة MyDelegate (سلسلة ق)؛

يمكن أن تستخدم اللجنة المذكورة أعلاه للإشارة إلى أي أسلوب يأخذ معلمةسلسلة واحدةوإرجاع متغير نوعint.

بناء الجملة لإعلان التكليف على النحو التالي:

مندوب <نوع الإرجاع> <المندوب اسم> <قائمة المعلمة>

أمثلة لجنة (مندوب)

مرة واحدة أعلنت نوع مندوب، يجب استخدام الكائن مندوب الكلمةجديدة لخلق، مع وجود أساليب معينة.عند إنشاء معلمة مندوب تمريرها إلى البيانالجديد بمثابة دعوة طريقة، مثل الكتابة، ولكن بدون وسائط.على سبيل المثال:

مندوب العام printString باطلة (سلسلة ق)؛
...
printString PS1 = printString الجديد (WriteToScreen)؛
printString PS2 = printString الجديد (WriteToFile)؛

يوضح المثال التالي بيان اللجنة، مثيل والاستخدام، ومندوب يمكن استخدامها لمرجع الأسلوب مع حجة صحيح وإرجاع قيمة عددية.

باستخدام نظام.

تفويض كثافة NumberChanger (كثافة العمليات ن)؛
DelegateAppl مساحة
{
   الطبقة TestDelegate
   {
      ساكنة الباحث الأسطوانات = 10؛
      العام ساكنة الباحث AddNum (الباحث ع)
      {
         الأسطوانات + = ع؛
         العودة الأسطوانات.
      }

      العام ساكنة الباحث MultNum (كثافة ف)
      {
         الأسطوانات * = س،
         العودة الأسطوانات.
      }
      الباحث ثابت العام getNum ()
      {
         العودة الأسطوانات.
      }

      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
         // إنشاء مثيل مندوب NumberChanger NC1 = الجديدة NumberChanger (AddNum)؛
         NumberChanger NC2 = الجديدة NumberChanger (MultNum)؛
         // استدعاء الأسلوب باستخدام NC1 الكائن مندوب (25)؛
         Console.WriteLine ( "قيمة رقم: {0}"، getNum ())؛
         NC2 (5)؛
         Console.WriteLine ( "قيمة رقم: {0}"، getNum ())؛
         Console.ReadKey ()؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

قيمة رقم: 35
قيمة رقم: 175

بتكليف المتعدد (البث المتعدد لمندوب)

كائن مندوب يمكن استخدام المشغل "+" لدمج. مندوب ليطلق عليه دمج دمج اثنين من المندوبين. نفس النوع فقط من الثقة يمكن الجمع. "-" المشغل يمكن استخدامها لإزالة المكون من مندوب مندوب مجتمعة.

استخدام هذه الميزة مفيدة كلفت، يمكنك إنشاء قائمة من مندوب يستدعي الأسلوب عندما يتم استدعاء لاستدعاء. وهذا ما يسمىالمتعدد تفويض (الإرسال المتعدد)،المعروف أيضا باسم الإرسال المتعدد. يوضح البرنامج التالي مندوب المتعدد:

باستخدام نظام.

تفويض كثافة NumberChanger (كثافة العمليات ن)؛
DelegateAppl مساحة
{
   الطبقة TestDelegate
   {
      ساكنة الباحث الأسطوانات = 10؛
      العام ساكنة الباحث AddNum (الباحث ع)
      {
         الأسطوانات + = ع؛
         العودة الأسطوانات.
      }

      العام ساكنة الباحث MultNum (كثافة ف)
      {
         الأسطوانات * = س،
         العودة الأسطوانات.
      }
      الباحث ثابت العام getNum ()
      {
         العودة الأسطوانات.
      }

      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
         // إنشاء مثيل مندوب NumberChanger نورث كارولاينا.
         NumberChanger NC1 = الجديدة NumberChanger (AddNum)؛
         NumberChanger NC2 = الجديدة NumberChanger (MultNum)؛
         NC = NC1.
         NC + = NC2.
         // دعوة نورث كارولاينا المتعدد (5)؛
         Console.WriteLine ( "قيمة رقم: {0}"، getNum ())؛
         Console.ReadKey ()؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

قيمة رقم: 75

الرئيسية (مندوب) الاستخدامات

يوضح المثال التالي استخدام الوفود. أن تستخدمprintStringالرئيسي مرجع الأسلوب مع سلسلة كمدخل ولا يرجع أي شيء.

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

باستخدام نظام.
باستخدام System.IO.

DelegateAppl مساحة
{
   الطبقة PrintString
   {
      خ يقوم FileStream جامدة؛
      ثابت جنوب غرب StreamWriter.
      // بيان وكيل المندوب العام الفراغ printString (سلسلة ق)؛

      // طباعة هذا الأسلوب إلى وحدة التحكم الجمهور WriteToScreen الفراغ ثابت (شارع سلسلة)
      {
         Console.WriteLine ( "السلسلة: {0}"، شارع)؛
      }
      // يطبع هذه الطريقة لتقديم العام WriteToFile باطل ثابت (سلسلة ق)
      {
         خ = يقوم FileStream جديدة ( "ج: \\ message.txt"
         FileMode.Append، FileAccess.Write)؛
         جنوب غرب = StreamWriter جديد (خ م)؛
         sw.WriteLine (ق)؛
         sw.Flush ()؛
         sw.Close ()؛
         fs.Close ()؛
      }
      // هذه الطريقة مندوب كمعلمة، واستخدامه لاستدعاء الأسلوب الجمهور sendString الفراغ ثابت (printString PS)
      {
         ملاحظة ( "مرحبا أيها العالم")؛
      }
      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
         printString PS1 = printString الجديد (WriteToScreen)؛
         printString PS2 = printString الجديد (WriteToFile)؛
         sendString (PS1)؛
         sendString (PS2)؛
         Console.ReadKey ()؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

السلسلة: مرحبا العالم