"

دلیگیت (Delegate ) در سی شارپ

تیم تحریریه 1403/12/19 0 266
لینک کوتاه https://zoheirsoftware.com/z/104fd3dad |
Delegate  در سی شارپ,ساختار Delegate در سی شارپ,انواع Delegate در سی شارپ,دلیگیت  در سی شارپ

دلیگیت (Delegate)  در سی شارپ

در سی شارپ، Delegate یک نوع مرجع (Reference Type) است که می‌تواند به متدها اشاره کند و آن‌ها را فراخوانی کند.

Delegateها مشابه اشاره‌گرهای تابع در زبان‌های مانند ++C هستند اما امن‌تر و نوع بازگشتی و پارامترهای متد را بررسی می‌کنند.

از آن‌ها معمولاً برای پیاده‌سازی رویدادها (Events) و عبارات لامبدا استفاده می‌شود.

به‌عنوان مثال، اگر نیاز باشد که متدی را به‌صورت پویا به متد دیگری ارسال کنیم، می‌توان از یک Delegate استفاده کرد.

در نمونه کد زیر، یک Delegate برای چاپ پیام تعریف شده است:

using System;

delegate void PrintMessage(string message);

class Program  
{  
    static void Print(string msg) => Console.WriteLine(msg);

    static void Main()  
    {  
        PrintMessage del = Print;  
        del("Hello, Delegates!");  
    }  
}


در این مثال، PrintMessage یک دلیگیت  است که به متد Print متصل شده و مقدار ورودی را چاپ می‌کند.

این قابلیت امکان انعطاف‌پذیری و برنامه‌نویسی پویاتر را فراهم می‌کند.

 

Delegate  در سی شارپ

ساختار دلیگیت  در سی شارپ

یک دلیگیت  در #C شبیه به یک اشاره‌گر به تابع در زبان‌های برنامه‌نویسی C و ++C است.

به طور معمول، وقتی شما یک Delegate تعریف می‌کنید، باید امضای متدی که می‌خواهید به آن اشاره کنید را مشخص کنید.

public delegate void MyDelegate(string message);

در اینجا، MyDelegate یک Delegate است که یک پارامتر از نوع string دریافت کرده و هیچ مقداری برنمی‌گرداند (void).

 

استفاده از Delegate در سی شارپ

برای استفاده از یک Delegate، ابتدا باید یک شیء از Delegate مورد نظر ایجاد کنید و سپس آن را به یک متد متصل کنید.

using System;

public class Program

{

    // تعریف Delegate

    public delegate void MyDelegate(string message);


    public static void Main(string[] args)

    {

        // ایجاد شیء Delegate و اتصال آن به متد

        MyDelegate del = new MyDelegate(SayHello);




        // فراخوانی Delegate

        del("Hello, Delegate!");

    }


    // متد که توسط Delegate فراخوانی می‌شود

    public static void SayHello(string message)

    {

        Console.WriteLine(message);

    }

}

در این مثال، ابتدا یک Delegate به نام MyDelegate تعریف شده است.

سپس یک شیء از این Delegate ساخته می‌شود و به متد SayHello متصل می‌شود.

در نهایت، با استفاده از Delegate، متد SayHello فراخوانی می‌شود.

 

انواع دلیگیت  (Delegate) در سی شارپ

در #C، چند نوع مختلف Delegate وجود دارد که به شرح زیر است:

  • Delegate ساده

    این نوع دلیگیت  به یک متد خاص اشاره می‌کند و تنها یک بار می‌تواند متد را فراخوانی کند.
  • Delegate چندگانه (Multicast Delegate)

    این نوع دلیگیت  می‌تواند به چندین متد اشاره کند و آن‌ها را به طور هم‌زمان فراخوانی کند.
  • Delegate نامشخص (Anonymous Delegate)

    این نوع دلیگیت  بدون نیاز به تعریف یک متد مجزا ایجاد می‌شود و معمولاً در مواقعی که نیاز به متد خاصی برای یک عملیات وجود داشته باشد، استفاده می‌شود.

 

انواع Delegate در سی شارپ

Delegate ساده (Single-cast Delegate)

همانطور که پیش‌تر اشاره شد، Delegate می‌تواند به یک متد خاص اشاره کند.

در این حالت، تنها یک متد به Delegate متصل می‌شود.

using System;

public class Program

{

    // تعریف Delegate

    public delegate void MyDelegate(string message);


    public static void Main(string[] args)

    {

        // ایجاد شیء Delegate و اتصال آن به متد

        MyDelegate del = new MyDelegate(SayHello);




        // فراخوانی Delegate

        del("Hello, Single-cast Delegate!");

    }


    // متد که توسط Delegate فراخوانی می‌شود

    public static void SayHello(string message)

    {

        Console.WriteLine(message);

    }

}

 

 

آیا به دنبال یک فرصت عالی برای یادگیری برنامه‌نویسی هستید؟ 🚀

با دوره آموزشی سی‌شارپ ما، شما می‌توانید مهارت‌های خود را به سطح جدیدی ارتقا دهید! این دوره به‌طور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامه‌نویسی سی‌شارپ پیش بروید.

👨‍🏫 چرا دوره ما را انتخاب کنید؟

  • محتوای جامع و عملی: با پروژه‌های واقعی و تمرینات عملی، یادگیری را به تجربه‌ای جذاب تبدیل کنید.
  • مدرس مجرب: از تجربه و دانش مدرس حرفه‌ای بهره‌مند شوید که شما را در هر مرحله از یادگیری راهنمایی می‌کنند.
  • پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
  • دسترسی مادام‌العمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، می‌توانید به آن مراجعه کنید.

💡 فرصت را از دست ندهید!

بایادگیری سی‌شارپ، می‌توانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژه‌های جذاب و چالش‌برانگیز شرکت کنید.

همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده‌ای روشن‌تر بردارید!

شرکت در دوره آموزش برنامه نویسی سی شارپ

 

 

Delegate چندگانه (Multicast Delegate)

Delegate چندگانه به شما این امکان را می‌دهد که چندین متد را به یک Delegate اضافه کنید.

در این حالت، Delegate به تمام متدهای متصل به خود اشاره می‌کند و آن‌ها را به ترتیب فراخوانی می‌کند.

using System;

public class Program

{

    // تعریف Delegate

    public delegate void MyDelegate(string message);


    public static void Main(string[] args)

    {

        // ایجاد شیء Delegate و اتصال آن به متدها

        MyDelegate del = new MyDelegate(SayHello);

        del += new MyDelegate(SayGoodbye);


        // فراخوانی Delegate

        del("Hello, Multicast Delegate!");

    }


    // متدهایی که توسط Delegate فراخوانی می‌شوند

    public static void SayHello(string message)

    {

        Console.WriteLine("Hello: " + message);

    }


    public static void SayGoodbye(string message)

    {

        Console.WriteLine("Goodbye: " + message);

    }

}

در این مثال، با استفاده از += دو متد به Delegate اضافه شده‌اند.

وقتی Delegate فراخوانی می‌شود، هر دو متد به ترتیب اجرا خواهند شد.

 

Delegate ناشناخته (Anonymous Delegate)

در #C، می‌توان بدون نیاز به تعریف یک متد جداگانه، از Delegate ناشناخته (Anonymous Delegate) استفاده کرد.

این نوع Delegate به شما این امکان را می‌دهد که در همان جایی که Delegate استفاده می‌شود، کد مربوطه را بنویسید.

using System;

public class Program

{

    public static void Main(string[] args)

    {

        // ایجاد Delegate ناشناخته و استفاده از آن

        MyDelegate del = delegate(string message)

        {

            Console.WriteLine("Anonymous Delegate: " + message);

        };

        // فراخوانی Delegate

        del("Hello, Anonymous Delegate!");

    }


    // تعریف Delegate

    public delegate void MyDelegate(string message);

}

در اینجا، از Delegate ناشناخته برای چاپ پیام استفاده شده است، بدون اینکه نیازی به نوشتن یک متد جداگانه باشد.

 

مزایای استفاده از دلیگیت (Delegate) در سی شارپ

  • انعطاف‌پذیری

    Delegate‌ ها باعث می‌شوند که شما بتوانید متدها را به عنوان پارامتر به متدهای دیگر ارسال کنید و از این طریق انعطاف‌پذیری بالاتری در طراحی نرم‌افزار داشته باشید.
  • پیاده‌سازی الگوهای طراحی

    Delegate‌ ها در پیاده‌سازی الگوهای طراحی مختلف مانند Command، Observer، و Strategy بسیار مفید هستند.
  • رویدادها و Callback‌ها

    Delegate‌ ها ابزار اصلی برای مدیریت رویدادها و Callback‌ها در C# هستند.
  • کاهش وابستگی‌ها

    Delegate‌ ها می‌توانند وابستگی‌های کد را کاهش دهند و باعث افزایش قابلیت نگهداری کد شوند.

مزایای استفاده از Delegate در سی شارپ

مثال   پروژه محور  از Delegate  در سی شارپ

پروژه: سیستم اطلاع‌رسانی به کاربران

در این پروژه، ما یک سیستم ساده داریم که از Delegate برای ارسال پیام‌ها به کاربران مختلف استفاده می‌کند.

وقتی یک رویداد (مانند ایجاد یک پیام جدید) اتفاق می‌افتد، این رویداد باعث فراخوانی Delegate‌ها برای اطلاع‌رسانی به کاربران می‌شود.

  •  تعریف Delegate و رویدادها

ابتدا یک Delegate برای اطلاع‌رسانی به کاربران و یک رویداد برای مدیریت آن تعریف می‌کنیم.

using System;

public class NotificationSystem

{

    // تعریف Delegate برای ارسال پیام به کاربران

    public delegate void NotificationDelegate(string message);




    // تعریف رویداد برای ارسال پیام

    public event NotificationDelegate OnNewMessage;


    // متد برای ایجاد پیام جدید و فعال‌سازی رویداد

    public void SendMessage(string message)

    {

        Console.WriteLine("New message received: " + message);


        // فعال‌سازی رویداد

        OnNewMessage?.Invoke(message);

    }

}
  • ایجاد کلاس‌های مربوط به کاربران

حال دو کلاس برای کاربران مختلف ایجاد می‌کنیم که هر کدام روش‌های خاص خود را برای دریافت پیام‌ها دارند.

public class User

{

    public string Name { get; set; }


    // متد برای دریافت پیام

    public void ReceiveMessage(string message)

    {

        Console.WriteLine($"{Name} received message: {message}");

    }

}
  •  اتصال Delegate به رویداد

در نهایت، در برنامه اصلی، کاربرانی را ایجاد می‌کنیم و Delegate‌ها را به رویداد ارسال پیام متصل می‌کنیم.

using System;




public class Program

{

    public static void Main(string[] args)

    {

        // ایجاد سیستم اطلاع‌رسانی

        NotificationSystem notificationSystem = new NotificationSystem();




        // ایجاد کاربران

        User user1 = new User { Name = "Ali" };

        User user2 = new User { Name = "Sara" };




        // اتصال کاربران به رویداد ارسال پیام

        notificationSystem.OnNewMessage += user1.ReceiveMessage;

        notificationSystem.OnNewMessage += user2.ReceiveMessage;




        // ارسال پیام و فعال‌سازی رویداد

        notificationSystem.SendMessage("Hello, this is a new notification!");

    }

}

 توضیحات کد

  • NotificationDelegate: یک Delegate است که به متدهایی اشاره می‌کند که یک پارامتر از نوع string دریافت می‌کنند.

  • OnNewMessage: رویداد است که از Delegate استفاده می‌کند تا پیام‌ها را به گیرندگان ارسال کند.

  • SendMessage: متدی است که هنگام ارسال یک پیام جدید، رویداد OnNewMessage را فعال می‌کند و پیام‌ها را به کاربران ارسال می‌کند.

  • ReceiveMessage: متدی از کلاس User است که پیام‌ها را دریافت کرده و چاپ می‌کند.

خروجی برنامه

New message received: Hello, this is a new notification!

Ali received message: Hello, this is a new notification!

Sara received message: Hello, this is a new notification!

 

دوره های مرتبط
آموزش برنامه نویسی سی شارپ,آموزش پروژه محور سی شارپ,آموزش مقدماتی تا پیشرفته سی شارپ,طراحی نرم افزار تحت ویندوز

آموزش برنامه نویسی سی شارپ

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

999,000 تومان

3.6k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.