کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش کاربردی Delegate ها در C#

آموزش کاربردی Delegate در قالب آموزش C# با مثال های کاربردی

Delegate ها دارای ویژگی های زیر می باشند:

  1. delegate ها در C# مشابه pointer ها در C++ هستند اما بر خلاف آن ها TYPE SAFE بوده و کاربر را مستقیما با خانه های حافظه درگیر نمی کنند. به عبارت دیگر از رخداد خطاهای مربوط به نوع داده ای در برنامه جلوگیری می کند
  2. در این قسمت از آموزش C#توسط Delegate ها به توابع این امکان را می دهند تا خود به عنوان پارامتر به توابع دیگر فرستاده شوند.
  3. می توان با استفاده از delegate ها، متدهای بازفراخوان یا callback تعریف کرد.
  4. delegate ها را می توان به صورت زنجیره ای و پشت سرهم فراخوانی کرد. برای مثال چندین متد به هنگام اتفاق افتادن یک event یا رخداد صدا خورده شوند.
  5. لزومی ندارد متدها و delegate ها از لحاظ نوع پارامتر ورودی، ترتیب و تعداد آن ها (signature) با هم برابر باشند.
  6. توسعه دهنده می تواند به کمک این الگو توسعه، یک اشاره گر (reference) به متد مورد نظر را داخل آبجکت delegate کپسوله سازی کند. آبجکت delegate سپس به راحتی قابل ارسال به کدی است که می تواند متد مورد اشاره را صدا بزند، از این طریق دیگر لازم نیست در زمان کامپایل متد مورد فراخوانی دقیقا مشخص شود.
  7. یکی از ویژگی های جالب توجه و کاربردی delegate ها این است که برایشان اهمیت ندارد که آبجکتی که به آن اشاره می کنند، از جنس کدام کلاس می باشد. کافی است نوع آرگومان های ورودی و خروجی آبجکت مورد نظر با آرگومان های ورودی و خروجی delegate منطبق باشند. این قابلیت سبب فراخوانی آسان کد anonymous (توابع بی نام یا anonymous) می شود.
مثال کاربردی 1

پیش از پیاده سازی الگو توسعه ی 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
1396/05/12 11671 2538
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...