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

 

delegate  یکی از مباحث پیشرفته سی شارپ برای یادگیری سی شارپ ابتدا آموزش سی شارپمقدماتی را در ببینید.

Delegate ها، يكي ديگر از انواع مرجعي زبان C#‎‎ هستند كه با استفاده از آنها مي‌توانيد مرجعي به یک متد داشته باشيد، بدين معنا كه delegate ها، آدرس متدي خاص را در خود نگه می‌دارند. درصورتی‌که قبلاً با زبان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
  • کوتاه‌کردن کدنویسی

 

تگ‌ها
اشتراک
0 نظرات

برای ارسال نظر باید وارد حساب کاربری خود شوید
ورود به حساب کاربری ثبت نام