واگذاری یا تفویض در برنامه‌نویسی شیءگرا، به «ارزیابی» یک عضو (ویژگی یا شگرد) از یک شیء (گیرنده) در زمینه شیء اصلی دیگر (فرستنده) گفته می‌شود. یا (به : ) در ، به «ارزیابی» یک عضو ( یا ) از یک (گیرنده) در زمینه شیء اصلی دیگر (فرستنده) گفته می‌شود. واگذاری را می‌توان به صورت انجام داد، در این حالت فرستنده به شیء گیرنده ارسال می‌شود، این موضوع را می‌توان در هر انجام داد؛ یا اینکه واگذاری را به صورت انجام داد، این کار از طریق «قواعد جستجوی عضو» در آن زبان انجام می‌شود، که نیاز به پشتیبانی‌هایی توسط آن زبان در آینده دارد. واگذاری ضمنی، شگرد اساسی برای استفاده مجدد از رفتار، در برنامه‌نویسی است، و این موضوع مشابه با در است. معروف‌ترین زبان‌هایی که از واگذاری در سطح زبان پشتیبانی می‌کنند، در درجه اول، زبان (به : ) است که از مفهوم واگذاری از طریق مفهوم « ی والد » استفاده می‌کند، این اسلات‌ها، بر اساس جستجوی شگرد در «فراخوانی‌های خودی» استفاده می‌شوند، و سپس زبان است ( را ببینید).
 در یک نگاه می‌توان گفت نماینده‌ها (Delegates) نوع داده‌ای در هستند که برای نگهداری آدرس متدها استفاده می‌شوند.
 اینچنین متصور بشید که یک متغیر از یک نوع داده‌ایِ نماینده (delegate) تعریف می‌کنید، سپس تعدادی متد (هم با نماینده) را بهش اضافه می‌کنید. سپس با invoke کردن، همه متدها اجرا می‌شوند. 
 هر متد دارای یک نوع داده‌ای برگشتی (void راهم یک نوع داده‌ای در نظر بگیرید) و صفر یا چند می‌باشد. این دو ویژگی امضای یک متد نامیده می‌شود. توجه شود که تعداد آرگومان‌ها، نوع داده‌ای آرگومان‌ها، ورودی یا خروجی بودن آرگومان و جابه جایی موقعیت آرگومان‌ها امضای متد را تغییر می‌دهند. در سی شارپ ما قادر به نوشتن متدهای بی‌نام و نوع‌های داده‌ای نامشخص (ANONYMOUS Types) هستیم. در این زمینه کاملاً قوی عمل می‌کند.
 شیوه تعریف یک نماینده به صورت زیر است:
 
 
 
 از تعریف بالا متوجه می‌شویم که این نماینده متدهایی که امضای آن‌ها شامل: نوع برگشتی void و یک آرگومان ورودی از نوع int باشد را می‌پذیرد.
 
 
 متغیر خصوصی _delVar در شروع کار مقدار null دارد. متد تعریف شده را با علامت + به _delVar اضافه می‌کنیم:
 به نحوه اضافه کردن متد به متغیر نماینده توجه کنین!!! فقط نام متد به تنهایی لازم است. کلمه this اختیاری است.
 روش اول گویا تر است
 نیز استفاده از - (منها) است بدین صورت:
 اگه نیاز به ثبت فقط یک متد در متغیرنماینده دارید از = (مساوی، انتساب) استفاده کنید:
 قبل از فراخوانی هر متغیر نماینده باید از تهی نبودن آن اطمینان حاصل کنید. این مسئله در برنامه‌های چند نخی خیلی بیشتر مورد نیاز است.
فراخوانی یک متغیر نماینده‌ای همانند فراخوانی متد می‌باشد با این تفاوت که این بار پرانتز را جلوی یک متغیر باز می‌کنیم نه یک متد!
مثال زیر نحوه فراخوانی را نمایش می‌دهد:
 بدین طریق متدهای ثبت شده در متغیر یکی پس از دیگری با مقدار (اینجا ۲۵) اجرا می‌شوند.
 نحوه اضافه کردن (ثبت کردن) متد به نماینده‌ها در (۲ تعریف نماینده و ثبت متدها در متغیر نماینده) توضیح داد شد. اما در برنامه‌نویسی‌های حرفه‌ای همیشه روال کار بدین صورت نیست. تعریف زیاد متدهای کوچک وقت گیر و باعث پیچیده‌تر شدن کد و در نهایت سردرگمی می‌شود. متدهای بی نام ترفندی است که کامپایلر سی شارپ و نه صرفاً CRL جهت رفع این مشکل به کار می‌برد. این مورد در LINQ بیشتر فواید خود را نشان می‌دهد.
در کل زمانی که به متدهای خطی نیاز باشد و آدرس و نام و نشان متد مهم نباشد از متدهای بی نام استفاده می‌شود.
متدهای بی نام در دو دسته قرار می‌گیرند:
 
 متدهای زیر را در نظر بگیرید:
 برای هر سه متد نماینده متناسب را تعریف می‌کنیم:
 نحوه تعریف متغیرهای نماینده‌ای و ثبت متدها و اجرای آن‌ها بدین صورت است:
 تا به حال روش استاندارد که در بخش قبل توضیح داده شده بود را مرور کردیم.
همین کار را با متدهای بی‌نام و با کلمه کلیدی delegate انجام می‌دهیم:
 
 در اینجا نیازی به تعریف متدها درون کلاس نیست و به صورت خطی در جلوی نمایندهٔ مربطه تعریف می‌شوند. دقت شود که نوشتن کلمه delegate اجباری است همچنین برای متدهای دارای آرگومان نوشتن نوع آرگومان‌ها اجباری است.
 با توجه به تعریف‌ها مثال (متدهای بی‌نام) عبارت لاندا را در مثال اینچنین بیان می‌کنیم:
 در تعریف عبارت لاندا از کلیدواژه => استفاده می‌شود. نوشتن نوع آرگومان‌ها اختیاری است.
 نماینده‌ها در تعریف رخدادها کاربردی ذاتی دارند. همانگونه که شی گرایی بدون رخدادها بی‌معنی می‌شود.
یک رخداد در طول زمان احتمالاً رخ خواهد داد. برای نمایش عکس‌العمل مناسب در هین رخ داد متد/هایی باید ثبت نام کرده باشند. متدهای ثبت نام شده در متغیر نماینده‌ای متناسب با رخداد ذخیره می‌شوند.
کد زیر تعریف نماینده و رخداد پایان (Terminate Event) را شرح می‌دهد.
 متدهای لازم را اینچنین در رخداد ثبت می‌کنیم:
 در اینجا از عبارت لاندا برای ایجاد و ثبت متد در رخداد استفاده کردیم. همانگونه که مشاهده می‌شود نحوه ثبت/حذف متد در/از یک رخداد دقیقاً مانند ثبت/حذف متد در/از یک متغیر نماینده‌ای می‌باشد. با این تفاوت که می‌توان ثبت متد در رخداد را با بلوک add کنترل کرد و کد مورد نیاز را تهیه کرد. بلوک remove نیز هنگام حذف متد از رخداد اجرا می‌شود. بدین ترتیب می‌توان مدیریت کاملی بر متدهای یک رخداد داشت. مواظب کدنویسی در این قسمت باشید!!!
 یک رخداد در زمان مناسب باید برانگیخته شود. برای برانگیختن رخداد اینچنین کد می‌نویسیم:
 برانگیختن یک رخداد برابر است با فراخوانی (اجرا یا invoke) کردن نماینده مربوطه است.
{"title": "واگذاری (برنامه‌نویسی شیءگرا)", "link": "https://fa.wikipedia.org//w/index.php?title=%D9%88%D8%A7%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C_(%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D8%B4%DB%8C%D8%A1%DA%AF%D8%B1%D8%A7)&oldid=35083337", "language": "fa"}