Delegate چیست ؟
مبحث Delegate در دات نت مشابه Pointer to Function در c و C++ می باشد که خیلی از شما با آن آشنایی دارید ، به زبان ساده یک Delegate یک شی است که به یک متد اشاره می کند .
اجازه بدهید با یک مثال مطلب را کمی روشن کنیم .
یک کلاس جدید به نام Calculate می سازیم و متد های Add , MutiPly , Devide را در آن پیاده سازی می کنیم :
public class Math
{
public static int Add(int first, int second)
{
return first + second;
}
public static int Multiply(int first, int second)
{
return first * second;
}
public static int Divide(int first, int second)
{
return first / second;
}
}
صفحه ای به نام Delegate.aspx به پروژه اضافه می کنیم و در زیر روال لود صفحه به صورت زیر از Delegate استفاده می کنیم :
public delegate int DelegateToMethod(int x, int y);
protected void Page_Load(object sender, EventArgs e)
{
// My Class
DelegateToMethod AddDelegate = new DelegateToMethod(Calculate.Add);
DelegateToMethod multiplyDelegate = new DelegateToMethod(Calculate.Multiply);
DelegateToMethod devideDelegate = new DelegateToMethod(Calculate.Divide);
// Dotnet Class
DelegateToMethod maxDelegate = new DelegateToMethod(Math.Max);
DelegateToMethod minDelegate = new DelegateToMethod(Math.Min);
Response.Write("جمع:" + AddDelegate(1, 2).ToString() + "<br>");
Response.Write("ضرب:" + multiplyDelegate(1, 2).ToString() + "<br>");
Response.Write("تقسیم:" + devideDelegate(1, 2).ToString() + "<br>");
Response.Write("بزرگتر:" + maxDelegate(1, 2).ToString() + "<br>");
Response.Write("کوچکتر:" + minDelegate(1, 2).ToString() + "<br>");
}
همانطور که ملاحظه می کنید متد ها همانند یک متغیر به Delegate ها پاس شده اند بنابراین ساختار یک Delegate (تعداد و جنس ورودی و مقدار خروجی) تعیین کننده نحوه استفاده از آن می باشد .
در کد های فوق ما متد های هم ساختار را از دو کلاس مختلف در یک جا کپسوله کردیم و از آن ها استفاده نمودیم .
علاوه بر این Delegate کاربر وسیع تری در نرم افزار های تحت ویندوز و همچنین کلاس های رویداد گرا دارد که خاریج از بحث ما می باشد .
فایل پروژه را از اینجا دانلود کنید