مشخصات مقاله
-
2538
-
0.0
-
11671
-
0
-
0
آموزش کاربردی Delegate ها در C#
دوره های مرتبط با این مقاله
آموزش کاربردی Delegate در قالب آموزش C# با مثال های کاربردی
Delegate ها دارای ویژگی های زیر می باشند:
- delegate ها در C# مشابه pointer ها در C++ هستند اما بر خلاف آن ها TYPE SAFE بوده و کاربر را مستقیما با خانه های حافظه درگیر نمی کنند. به عبارت دیگر از رخداد خطاهای مربوط به نوع داده ای در برنامه جلوگیری می کند
- در این قسمت از آموزش C#توسط Delegate ها به توابع این امکان را می دهند تا خود به عنوان پارامتر به توابع دیگر فرستاده شوند.
- می توان با استفاده از delegate ها، متدهای بازفراخوان یا callback تعریف کرد.
- delegate ها را می توان به صورت زنجیره ای و پشت سرهم فراخوانی کرد. برای مثال چندین متد به هنگام اتفاق افتادن یک event یا رخداد صدا خورده شوند.
- لزومی ندارد متدها و delegate ها از لحاظ نوع پارامتر ورودی، ترتیب و تعداد آن ها (signature) با هم برابر باشند.
- توسعه دهنده می تواند به کمک این الگو توسعه، یک اشاره گر (reference) به متد مورد نظر را داخل آبجکت delegate کپسوله سازی کند. آبجکت delegate سپس به راحتی قابل ارسال به کدی است که می تواند متد مورد اشاره را صدا بزند، از این طریق دیگر لازم نیست در زمان کامپایل متد مورد فراخوانی دقیقا مشخص شود.
- یکی از ویژگی های جالب توجه و کاربردی delegate ها این است که برایشان اهمیت ندارد که آبجکتی که به آن اشاره می کنند، از جنس کدام کلاس می باشد. کافی است نوع آرگومان های ورودی و خروجی آبجکت مورد نظر با آرگومان های ورودی و خروجی delegate منطبق باشند. این قابلیت سبب فراخوانی آسان کد anonymous (توابع بی نام یا anonymous) می شود.
پیش از پیاده سازی الگو توسعه ی delegate:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetData("Mahesh");
}
}
public void GetData(string Name)
{
lblName.Text = Name;
}
خروجی:
Mahesh
پس از استفاده از delegate در کد:
public delegate void MyDelegare(string var);
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MyDelegare objMyDelegare = new MyDelegare(GetData);
objMyDelegare("Mahesh");
}
}
public void GetData(string Name)
{
lblName.Text = Name;
}
خروجی:
Mahesh
delegate هایی که به چند متد اشاره می کنند/Multicast delegates
delegate هایی که می توانند اشاره گر به چندین متد را در خود نگه دارد و به عبارت دیگر میزبان چندین متد باشند، مانند آرایه ای که چندین متغیر را در خود نگه می دارد. لازم به ذکر است که multicast delegate ها بایستی فقط متدهایی را در خود کپسوله کنند که خروجی آن ها void می باشد چرا که در غیر این صورت خطای زمان اجرا برمی گرداند.
مثال کاربردی 2
public delegate void MyDelegare(string var);
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MyDelegare objMyDelegare = new MyDelegare(GetData);
objMyDelegare += new MyDelegare(GetDat_one);
//GetData and GetDat_one is called
objMyDelegare("Mahesh");
objMyDelegare -= new MyDelegare(GetDat_one);
lblName.Text = lblName.Text + "< br / >";
//GetData is called
objMyDelegare("Mahesh");
}
}
public void GetData(string Name){
lblName.Text = lblName.Text + "GetDate : " + Name;
}
public void GetDat_one(string Name)
{
lblName.Text = lblName.Text + " GetDate_One : " + Name;
}
خروجی:
GetDate : Mahesh GetDate_One : Mahesh GetDate : Mahesh