Delegate توی سی شارپ دقیقا برای چه چیزی استفاده میشه ؟ توی اینترنت هم بررسی کردم ولی کامل متوجه نشدم
لطفا خیلی ساده اون رو توضیح میدین ؟
توی سایت های فارسی زبان سرچ کنی موارد خیلی خوبی در این رابطه پیدا می کنید. لینک زیر در قالب چند قسمت فیلم آموزشی Delegate رو با مثال توضیح داده. به نظرم حتما مشاهده کنید این فیلم رو.
در کل میشه گفت از Delegate زمانی استفاده میشه که شما قصد دارید یک متد رو به عنوان ورودی متد دیگه استفاده کنید. به عنوان مثال فرض کنید قصد دارید که یک ماشین حساب طراحی کنید. یکی از چالش هایی که در حین طراحی ماشین حساب باهاش سر و کار دارید انتخاب Operator هست. یعنی تشخیص اینکه کاربر علامت + یا - یا * یا / رو انتخاب کرده. خب در اینجا می تونید از یک Delegate استفاده کنید.
یعنی به عبارتی یک متد از نوع Delegate طراحی می کنید که نوع خاصی نداره و این متد در متدهای دیگه نوعش مشخص میشه. اجازه بدید براتون مثال بزنم.
تعریف کلی یک متد Delegate به صورت زیر هست :
delegate returnType DelegateName(dt param1, dt param2, ... dt paramN);
خب به کدهای زیر دقت کنید :
using System;
public class Program
{
delegate void Operator(int num1, int num2);
static void Add(int x, int y)
{
Console.WriteLine("Sum is {0}.", x + y);
}
static void Subtract(int x, int y)
{
Console.WriteLine("Difference is {0}.", x - y);
}
static void Main()
{
Operator Operation;
int num1, num2;
Console.Write("Enter first number: ");
num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter second number: ");
num2 = Convert.ToInt32(Console.ReadLine());
if (num1 < num2)
{
Operation = new Operator(Add);
}
else
{
Operation = new Operator(Subtract);
}
Operation(num1, num2);
}
}
دقت کنید در مثال بالا در بدنه متد Main دو تابع داریم. یکی برای جمع کردن و یکی برای تفریق کردن. هر دو تابع 2 ورودی دارن. از طرفی یک متد به نام Operator از نوع Delegate هم تعریف کردیم که دارای 2 ورودی هست و در Main یک نمونه از این متد به نام Operation ایجاد کردیم. حالا هر جا که خواستیم Add یا Subtract رو صدا بزنیم چون ورودی های این دو تابع همون ورودیهای Operation هستن توابع Add یا Subtract رو به عنوان پارامتر ارسال می کنیم به Operation.
مثال بالا از از این لینک براتون انتخاب کردم.
یک مثال دیگه هم در این لینک وجود داره که متد Print رو به صورت Delegate تعریف کرده. در این جا متد Print میتونه تعداد صفحاتی که قرار هست چاپ بشه رو در ورودی دریافت کنه. همچنین همین متد میتونه یک تابع که قیمت چاپ صفحات هست رو دریافت کنه و هم تعداد صفحات رو مشخص کنه و هم قیمت. این هم مثال خوبی هست.
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1175
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
620
- پاسخ :
1
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
376
- پاسخ :
1
|
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
337
- پاسخ :
1
|
تاریخ :
1398/09/14
- ساعت :
01:58:00 PM
- بازدید :
4301
- پاسخ :
1
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
690
- پاسخ :
0
|
تاریخ :
1398/09/05
- ساعت :
06:04:00 PM
- بازدید :
3195
- پاسخ :
2
|
تاریخ :
1398/09/08
- ساعت :
11:38:00 PM
- بازدید :
3262
- پاسخ :
1
|
تاریخ :
1403/04/12
- ساعت :
07:27:00 PM
- بازدید :
677
- پاسخ :
0
|
تاریخ :
1403/01/29
- ساعت :
08:08:00 AM
- بازدید :
700
- پاسخ :
4
|
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
91
- پاسخ :
1
|
تاریخ :
1400/07/17
- ساعت :
10:39:00 PM
- بازدید :
2337
- پاسخ :
0
|
تاریخ :
1403/09/05
- ساعت :
06:32:00 PM
- بازدید :
73
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2042
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
119
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
153
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1071
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
476
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
950
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1381
- پاسخ :
1
|