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

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
    • کوتاه‌کردن کدنویسی

     


    • نویسنده: روشن احمدی

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران