در مثال قبلی در رابطه با چهار مرحله توليد و استفاده يک Delegate صحبت کرديم. دقت کنيد که معمولا مراحل توليد يک delegate کنار همديگر استفاده نمي شود. و اين مراحل بين چندين کلاس پخش مي شود تا استفاده اصلي آن مشخص شود.

اجازه بدين با يک مثال ادامه بديم:

يک بانک را در نظر بگيريد. مشريان اين بانک داراي اعتبار مشخصي مي باشند. در هنگام خريد اين اعتبار کمتر و کمتر خواهد شد. اين بانک داراي n بازرس است که در سطح شعب مختلف فعاليت مي کنند. بازرسان بانک وظيفه پيگيري وضعيت اين مشتري را دارند. پس وقتي خريد مشتري از اعتبارش بيشتر مي شود بايد اطلاعات مشتري به تمامي بارزسان اعلام شود تا پيگيري هاي لازم توسط نزديک ترين بازرس انجام شود.

خوب پس من يک کلاس خواهم داشت به نام Customer و يک کلاس هم به نام Agent:



همانطور که مي بينيد کلاس Customer داراي يک متد به نام Buy است که از اين طريق خريد انجام مي شود. نکته مهم اين است که بايد کدي بنويسيم که وقتي يک مشتري خريد مي کند تمام بازرسان متوجه خريد بيش از اعتبار وي شوند.



در کلاس Agent يک ArrayList براي ثبت فعاليت هاي هر يک از بازرسان در نظر گرفته شده است که براي ثبت پيگيري جديد بايد از متد AddTask استفاده شود. پس ما بايد به طريقي AddTask تمامي بازرسان را همزمان و در متد Buy کلاس Customer فراخواني کنيم.

براي انجام اين موضوع من يک Delegate متناسب با متد AddTask ايجاد مي کنم (مرحله اول).



حالا در کلاس Agent يک متغيير static (براي همه بازرسان) از جنس آن delegate ايجاد مي کنم. (مرحله دوم)
سپس در Constructor کلاس Agent متد AddTask هر يک از بازرسان را در delegate ثبت مي کنم. (مرحله سوم).

در نهايت موقعي که اعتبار مشتري من منفي مي شود delegate static را فراخواني مي کنم. در نتيجه به تمامي بازرسان يک وظيفه جديد اضافه خواهد شد.


و حالا کافيست چند شيء از هر کدام از کلاس ها بسازم و شروع به تست کنم:



و در نتيجه:


اين مثال را مرور کنيد. مسلما براي دوستاني که تازه با سي شارپ آشنا شده اند خيلي سنگين خواهد بود. اصلا مهم نيست کافيه که توي ذهنتون چند باري مرورش کنيد. به نظر من delegate سنگين ترين بحث سي شارپ است. پس اصلا به خودتون شک نکنيد!

بارگزاري مثال

ادامه دارد....