Delegate چیست؟ و در سی شارپ چه کاربردی دارد؟

delegate یکی از مباحث پیشرفته سی شارپ برای یادگیری سی شارپ ابتدا آموزش سی شارپ مقدماتی را در ببینید.
Delegate ها، يكي ديگر از انواع مرجعي زبان C# هستند كه با استفاده از آنها ميتوانيد مرجعي به یک متد داشته باشيد، بدين معنا كه delegate ها، آدرس متدي خاص را در خود نگه میدارند. درصورتیکه قبلاً با زبانC برنامهنويسي كردهايد، حتماً با اين مفهوم آشنايي داريد. در زبان C اين مفهوم با اشارهگرها (pointer) بيان ميشود.
Delegateها در واقع همانند اشارهگرها در زبان سی شارپ هستند و ما با استفاده از Delegateها میتوانیم به متدهای اشاره کنیم که ورودی و خروجی یکسانی داشته باشند.
delegate نوعي است شبيه به متد و همانند آن نيز رفتار ميكند. در حقيقت delegate انتزاعي (Abstraction) از يك متد است. در برنامهنويسي ممكن است به شرايطي برخورد كرده باشيد كه در آنها ميخواهيد عمل خاصي را انجام دهيد اما دقيقاً نميدانيد كه بايد چه متد يا شي اي را براي انجام آن عمل خاص مورداستفاده قرار دهيد. در برنامههاي تحت ويندوز این مورد بیشتر با آن روبه، روبه میشویم.
براي مثال تصور كنيد در برنامه شما، دكمهاي قرار دارد كه پس از فشار دادن اين دكمه توسط كاربر شيءاي يا متدي بايد فراخواني شود تا عمل موردنظر شما بر روي آن انجام گيرد. ميتوان بهجای اتصال اين دكمه به شيء يا متد خاص، آن را به يك delegate مرتبط نمود و سپس آن delegate را به متد يا شيء خاصي در هنگام اجراي برنامه متصل نمود.
سی شارپ یک زبان ساده ، مدرن و شی گرا است که به توسعه دهندگان انعطاف پذیری و ویژگی هایی را برای ساخت نرم افزار می دهد که نه تنها در دنیای امروز کاربرد دارد بلکه در آینده، بسیار پرکاربردتر می شود.برای اینکه یاد بگیرید با سی شارپ چه برنامه هایی رو میتوانید بنویسد به مقاله چه برنامه هایی با سی شارپ می توانیم بنویسیم ؟را مطالعه کنید.
فرض کنید ما در برنامه خود تعدادی متد داریم که نامهای متفاوت دارند اما ورودی و خروجی یکسانی دارند و ما در برنامه خود میخواهیم بنا به هر دلیلی هر زمانی یکی از این متدها را اجرا کنیم. یا ممکن است یک آرایه داشته باشیم که هزاران متد در خود جایداده باشد و بسته به شرایط موجود یکی از متدها را اجرا کنیم. در این شرایط ما نمیتوانیم وارد سورس کد شویم و نام این متد را بنویسیم و انتظار اجرا داشته باشیم. در این شرایط ما از اشارهگرها استفاده میکنیم که بتواند این متدهای موردنظر را برای ما اجرا کنند.
معرفی Func و Action
شاید در زبان C# با Func و Action روبرو شده باشید و یا از این دو استفاده کرده باشید و یا سورس کدهایی را از جای دیگر گرفته باشید و داخل برنامه copy paste کرده باشید ولی نمیدانید چه کاربردی دارند.
کاربرد این دو چیست؟
ما با استفاده از کلمه کلیدی Delegate ، Delegateهای خود را تعریف میکردیم و از آنها استفاده میکردیم. در Net. خود شرکت مایکروسافت دو Delegate بهصورت Generic برای ما ایجاد کرده است که ما میتوانیم از آنها استفاده کنیم و دیگر نیازی نیست Delegate را تعریف کنیم و از آن استفاده کنیم. Func و Action همان Delegateهایی هستند که مایکروسافت ارائه کرده است و ما میتوانیم از آنها استفاده کنیم و دیگر نیازی نیست Delegate را خود تعریف کنیم. Delegateها یک خروجی دارند و میتوانند تعدادی ورودی داشته باشند. زمانی که بخواهیم Delegate را تعریف کنیم از Func و Action استفاده میکنیم.اما این دو با هم چه تفاوتی دارند؟
تفاوت Func و Action
Action نوعی از delegate هستند، در واقع actionها در سی شارپ دلیگیت های بدون خروجی هستند، یعنی اگر در برنامه نیاز داشتید دلیگیتی از نوع void (بدون خروجی) تعریف کنید، میتوانید از action استفاده کنید actionها میتوانند حداکثر 16 ورودی داشته باشند و همه ورودیهای action نشاندهنده ورودیهای تابع هستند و میتوانید آنها را به متدهای بدون خروجی متصل کنید. با استفاده از کلمه کلیدی delegate میتوانید یک متد بینام به دلیگیت action اختصاص دهید.
funcها همانند actionها هستند با این تفاوت که دارای خروجی هستند. میتوانید آنها را به متدهای دارای خروجی متصل کنید. میتوانند حداکثر 16 ورودی داشته باشند و آخرین پارامتر در Func همیشه یک پارامتر خروجی است که بهعنوان نوع بازگشتی در نظر گرفته میشود. در این نوع دلیگیت هم مانند دلیگیت action میتوان متد بینام به آن اختصاص داد
اگر Delegate ما خروجی داشته باشد،یعنی درواقع خروجی غیر از Void داشته باشد از Func استفاده میکنیم.
در واقع تفاوت Func و Action فقط در همین است. Func خروجی دارد ولی Action خروجی void دارد.
.
مزایای استفاده از Action و Func
مزایای استفاده از دلیگیت های Action و Func به شرح زیر است :
- تعریف سریع و آسان یک delegate
- کوتاهکردن کدنویسی
جدیدترین ویدئوهای آموزشی
در بخش TV باگتو، آموزش های کوتاه و جدید را مشاهده نمایید