رادکام
void ShowString(string value, DisplayDelegate dispStr)
{
dispStr(value);
}
ShowString("Hello" , displayString);
در اینجا ما متد ShowString را فراخوانی می کنیم. این متد دو پارامتر دارد که اولی از نوع string است که اینجا عبارت "Hello" است و پارامتر دوم نیز از نوع delegate است که displayString نام دارد.
using System;
namespace DelegatesAndEvents
{
public delegate string OperationDelegate(string command);
public class ComputerSystem
{
public string StartApplication(string appName)
{
Console.Write("Inside ComputerSystem::StartApplication(): {0}\n", appName);
return "Success";
}
public string StopApplication(string appName)
{
Console.Write("Inside ComputerSystem::StopApplication(): {0}\n", appName);
return "Success";
}
public string InstallSoftware(string appName)
{
Console.Write("Inside ComputerSystem::InstallSoftware(): {0}\n", appName);
return "Success";
}
public string UnInstallSoftware(string appName)
{
Console.Write("Inside ComputerSystem::UnInstallSoftware(): {0}\n", appName);
return "Success";
}
public void Operation(string name, OperationDelegate oprDelegate)
{
Console.WriteLine("Result = {0}", oprDelegate(name));
}
}
}
ما اینجا OperationDelegate را داریم که یک پارامتر از نوع string می گیرد و مقدار بازگشتی آن نیز از نوع string است.
StartApplication
StopApplication
InstallSoftware
UnInstallSoftware
این چهار متد ساختار مشابهی مانند Delegate دارند. بدین معنی که هر 4 تا یک پارامتر ورودی از نوع string داشته و پارامتر خروجی آنها نیز از نوع string است. بنابراین Delegate می تواند به هر 4 تای این متد ها اشاره کند.
// See https://aka.ms/new-console-template for more information
using DelegatesAndEvents;
Console.WriteLine("Hello, World!");
Console.WriteLine("______________________________________________");
Console.WriteLine("");
ComputerSystem compsysObj = new ComputerSystem();
//User of delegate
OperationDelegate oprDelegate = new OperationDelegate(compsysObj.InstallSoftware);
Console.WriteLine("Result = {0}", oprDelegate("My Application"));
oprDelegate = new OperationDelegate(compsysObj.StartApplication);
Console.WriteLine("Result = {0}", oprDelegate("My Application"));
oprDelegate = new OperationDelegate(compsysObj.StopApplication);
Console.WriteLine("Result = {0}", oprDelegate("My Application"));
oprDelegate = new OperationDelegate(compsysObj.UnInstallSoftware);
Console.WriteLine("Result = {0}", oprDelegate("My Application"));
Console.WriteLine("");
Console.WriteLine("______________________________________________");
Console.WriteLine("");
//Passing delegate in method
oprDelegate = new OperationDelegate(compsysObj.StartApplication);
Console.WriteLine("Passing delegate in method");
compsysObj.Operation("MyApplication", oprDelegate);
Console.ReadKey();
در اینجا در خطوط بالا، ما یک نمونه از OperationDelegate به نام oprDelegate ایجاد کرده و متد InstallSoftware را کپسوله کرده ایم و سپس از همین oprDelegate استفاده می کنیم و مقدار رشته ای My Application را به آن پاس می دهیم. و این کار باعث فراخوانی متد InstallSoftware می شود. public void Operation(string name, OperationDelegate oprDelegate)
{
Console.WriteLine("Result = {0}", oprDelegate(name));
}
پارامتر دوم این متد از نوع OperationDelegate است. بنابراین نمونه ایجاد شده delegate که به متد پاس شده است،
compsysObj.Operation("My Application", oprDelegate);
وارد متد Operation شده و آنجا هم که از oprDelegate استاده می کنیم تا متد StartApplication را فراخوانی کنیم. و همانطور که گفتیم، oprDelegate متد StartApplication را کپسوله کرده است و همین متد StartApplication فراخوانی خواهد شد.
public string StartApplication(string appName)
{
Console.Write("Inside ComputerSystem::StartApplication(): {0}\n", appName);
return "Success";
}
Inside ComputerSystem::StartApplication(): My Application
Result = Success
حال برنامه را اجرا کرده و خروجی را به شکل زیر مشاهده می کنیم: 635بازدید
دیدگاه کاربران
هنوز دیدگاهی ثبت نشده است.
شما میتوانید درباره این مقاله، دیدگاه خود را ثبت کنید.