۱۴۰۴/۰۷/۰۹
Delegates, Event و Lambda
۱. Delegates
تعریف:
- Delegate نوع دادهای است که میتواند مرجع یک متد را نگه دارد و بعداً آن را فراخوانی کند.
- مشابه function pointer در C/C++ است ولی type-safe است.
مثال ساده:
// تعریف delegate
delegate void MyDelegate(string message);
class Program
{
static void ShowMessage(string msg)
{
Console.WriteLine(msg);
}
static void Main()
{
// انتساب متد به delegate
MyDelegate d = ShowMessage;
d("Hello Delegate"); // فراخوانی متد از طریق delegate
}
}
نکته: Delegate میتواند چند متد را همزمان نگه دارد (Multicast Delegate).
۲. Events
تعریف:
- Event نوع خاصی از delegate است که فقط میتوان subscribe (+=) یا unsubscribe (-=) کرد.
- کد خارج از کلاس نمیتواند event را invoke کند، فقط کلاس مالک میتواند.
مثال:
class Publisher
{
public event Action OnChange; // event تعریف شد
public void RaiseEvent()
{
OnChange?.Invoke(); // فقط کلاس خودش میتواند فراخوانی کند
}
}
class Program
{
static void Main()
{
Publisher p = new Publisher();
p.OnChange += () => Console.WriteLine("Event triggered!"); // Subscribe
p.RaiseEvent();
}
}
نکته: Event بیشتر برای پیامرسانی بین کلاسها و تغییر وضعیت استفاده میشود.
۳. Lambda و Action/Func
۳.۱ Lambda Expressions
- Lambda یک روش کوتاه برای تعریف متدهای ناشناس (Anonymous Method) است.
- شکل کلی:
(parameters) => expression
مثال:
Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(3, 5)); // خروجی: 8
۳.۲ Action و Func
- Action → delegate بدون مقدار بازگشتی
- Func<T> → delegate با مقدار بازگشتی
مثال Action:
Action<string> print = msg => Console.WriteLine(msg);
print("Hello Action"); // خروجی: Hello Action
مثال Func:
Func<int, int, int> multiply = (x, y) => x * y;
Console.WriteLine(multiply(4, 5)); // خروجی: 20
نکته: Lambdaها معمولاً برای LINQ, Event handlers و کوتاه کردن delegate ها استفاده میشوند.
۴. جمعبندی نکات مهم آزمونی
| نکته | توضیح |
|---|---|
| Delegate | نوع دادهای برای نگه داشتن مرجع متد، type-safe |
| Multicast Delegate | میتواند چند متد را نگه دارد و همزمان فراخوانی کند |
| Event | delegate با محدودیت، فقط subscribe/unsubscribe بیرون کلاس |
| Lambda | متد ناشناس کوتاه، (params) => expression |
| Action | delegate بدون بازگشت مقدار |
| Func | delegate با بازگشت مقدار |
Accept Cookies
[your-shortcode]