دلیگیتها (Delegates) در C#
Delegate یک نوع داده در C# است که به ما اجازه میدهد متدها را به عنوان پارامتر ارسال کنیم و رفتارهای پویا در برنامه ایجاد کنیم.
Delegate چیست؟
Delegate یک reference به متدها است. یعنی میتوانیم یک متد را داخل یک متغیر ذخیره کنیم و آن را اجرا کنیم.
تعریف Delegate
public delegate void Notify(string message);
استفاده از Delegate
public class Messenger
{
public void SendMessage(string message)
{
Console.WriteLine(message);
}
}
Messenger messenger = new Messenger();
Notify notify = messenger.SendMessage;
notify("Hello from Delegate");
Delegate با متد استاتیک
public class Logger
{
public static void Log(string message)
{
Console.WriteLine("Log: " + message);
}
}
Notify notify = Logger.Log;
notify("System started");
MultiCast Delegate
یک delegate میتواند به چند متد اشاره کند.
public class Messenger
{
public void Method1(string msg)
{
Console.WriteLine("Method1: " + msg);
}
public void Method2(string msg)
{
Console.WriteLine("Method2: " + msg);
}
}
Messenger m = new Messenger();
Notify notify = m.Method1;
notify += m.Method2;
notify("Hello");
Action و Func
در C# مدرن معمولاً به جای delegate سفارشی از Action و Func استفاده میشود.
Action (بدون خروجی)
Action print = message =>
{
Console.WriteLine(message);
};
print("Hello Action");
Func (با خروجی)
Func add = (a, b) => a + b;
Console.WriteLine(add(3, 5));
کاربرد واقعی Delegate
public class Processor
{
public void Execute(Action callback)
{
Console.WriteLine("Processing...");
callback();
}
}
Processor p = new Processor();
p.Execute(() =>
{
Console.WriteLine("Done!");
});
جمعبندی
Delegateها ابزار قدرتمندی در C# هستند که امکان پاس دادن رفتار (behavior) به متدها و ایجاد طراحیهای انعطافپذیر را فراهم میکنند.