بیایید ابتدا به مفهوم callback بپردازیم:
در برنامه نویسی کامپیوتر callback کد اجرایی است که به عنوان argument به کد دیگر منتقل شده است.
سی شارپ برای این منظور delegates (نمایندگان) دارد. آنها به شدت با events (رویدادها) مورد استفاده قرار می گیرند ، زیرا یک رویداد می تواند به طور خودکار تعدادی از delegates (نمایندگان) پیوست شده (event handlers) را فراخوانی کند.در واقع یک callback ، (نشانگر) pointer کد اجرایی است که به عنوان آرگومان (argument) به کد های دیگر منتقل می شود.
یک مثال برای درک بهتر در دنیای واقعی:
من فقط شما را ملاقات کردم ، و این دیوانه است ،
اما در اینجا شماره من (delegate) است ،
بنابراین اگر اتفاقی رخ دهد (event) ،
با من تماس بگیرید ، شاید (callback)؟
آهنگ Carly Rae Jepsen ?
I just met you,
And this is crazy,
But here's my number (delegate),
So if something happens (event),
Call me, maybe (callback)?
استفاده از callback معمولاً در منطق ناهمزمان (asynchronous) است.
برای ایجاد callback در C# ، باید آدرس یک function را درون یک متغیر ذخیره کنید. برای رسیدن به این منظور، استفاده از یک delegate (نماینده) یا استفاده از lambda به صورت Func یا Action حاصل می شود.
public delegate void WorkCompletedCallBack(string result); public void DoWork(WorkCompletedCallBack callback) { callback("Hello world"); } public void Test() { WorkCompletedCallBack callback = TestCallBack; // Notice that I am referencing a method without its parameter DoWork(callback); } public void TestCallBack(string result) { Console.WriteLine(result); }
امروزه در C# ، این کار با استفاده از لامبدا مانند زیر انجام میدهند:
public void DoWork(Action<string> callback) { callback("Hello world"); } public void Test() { DoWork((result) => Console.WriteLine(result)); }