Delegate نوعی مرجع به یک متد است. به عبارت سادهتر، میتوانید آن را به عنوان “اشارهگر به متد” در نظر بگیرید که اجازه میدهد آدرس یک متد را ذخیره کرده و آن را بهصورت غیرمستقیم فراخوانی کنید. این شباهتی به اشارهگرهای تابع در زبان C دارد، با این تفاوت که Delegateها نوع ایمن هستند و از بررسیهای نوع در زمان کامپایل بهره میبرند.
Delegate در واقع نوعی “قرارداد” است که مشخص میکند یک متد باید چه نوع ورودیها و خروجیای داشته باشد. این ویژگی باعث میشود تا وابستگی بین کلاسها کاهش یابد و انعطافپذیری در برنامهنویسی افزایش پیدا کند، زیرا میتوان بدون تغییر مستقیم در ساختار کلاسها، متدهای مختلف را به Delegate متصل کرد و به راحتی رفتارهای متنوعی را پیادهسازی نمود. این ویژگی باعث میشود بتوان متدهایی با امضای مشابه را به یک Delegate متصل کرد و با استفاده از آن، به شکل انعطافپذیری از متدهای مختلف استفاده نمود.
