انتساب delegate ها
به این دلیل که delegate ها نوع های مرجع هستند، شما می توانید ارجاع گنجانده شده در یک متغیر وکالتی را با انتساب یک ارجاع به آن متغیر وکالتی تغییر دهید. شیئ وکالتی قدیمی توسط زباله روب (Garbage Collector) عزل خواهد شد.
برای مثال، کد زیر مقدار delVar را تنظیم کرده سپس آنرا تغییر می دهد. شکل زیر این موضوع را نشان می دهد.
MyDel delVar;
delVar = myInstObj.MyM1; // Create and assign the delegate object.
...
delVar = SClass.OtherM2; // Create and assign the new delegate object.
ترکیب delegate ها
تمام وکیل هایی را که تا اینجا ملاحظه کردید تنها یک متد در لیست احضار خود داشتند. delegate ها را می توان با استفاده از عملگر "جمع" با یکدیگر ترکیب (Combine) کرد. نتیجه این کار ساخته شدن یک delegate جدید با یک لیست احضار جدید است، که در این لیست احضار جدید لیست احضار هردو وکیل موجود است.
برای مثال، کد زیر 3 وکیل می سازد. وکیل سوم از ترکیب 2 وکیل اول ایجاد شده است.
MyDel delA = myInstObj.MyM1;
MyDel delB = SClass.OtherM2;
MyDel delC = delA + delB; // Has combined invocation list
هرچند کلمه "ترکیب" این مفهوم را متبادر می کند که وکیل هایی که در قسمت عملوند قرار گرفته اند تغییر می کنند؛ اما بطور کلی چنین چیزی اتفاق نمی افتد. در حقیقت، delegate ها تغییرناپذیر هستند. بعد از اینکه شیئ وکالتی ساخته شد، دیگر نمی توان آنرا تغییر داد.
شکل زیر نتیجه اجرای کد قبلی را توضیح می دهد. دقت کنید که وکیل ها عملوند (آنهایی که در کنار عملگر "+" قرار دارند) بدون تغییر باقی می مانند.
اضافه کردن متد به delegate ها
همانطور که ملاحظه کردید وکیل ها در حقیقت غیرقابل تغییر هستند. اما #C از طریق عملگر =+ املائی را فراهم نموده که توسط آن بنظر میرسد که می توانید یک متد را به delegate اضافه کنید.
برای مثال، کد زیر 2 متد را به لیست احضار delegate "اضافه" می کند. متدها به پائین لیست احضار اضافه شده اند. شکل زیر نتیجه را نشان می دهد.
MyDel delVar = inst.MyM1; // Create and initialize.
delVar += SCl.m3; // Add a method.
delVar += X.Act; // Add a method.
در توضیح شکل باید بگوییم که در واقع وکیل ها غیرقابل تغییرند؛ وکیل نتیجه کد بالا که در لیست احضار خود دارای 3 متد است، در واقع یک وکیل جدید است که بوسیله متغیر به آن اشاره شده است.
درواقع کاری که در اینجا انجام می پذیرد این است که یک وکیل جدید با لیست احضار وکیل سمت چپ علامت =+ و متد سمت راست ساخته می شود. این وکیل جدید سرانجام به متغیر delVar انتساب داده می شود.
شما می توانید یک متد را بیش از یک بار به یک وکیل انتساب دهید. هر بار که این کار را انجام می دهید، یک عنصر جدید به لیست احضار افزوده می شود.