اخبار، مطالب و رویدادهای مرتبط با توسعه نرم افزار رادکام

برنامه نویسی پیشرفته سی شارپ برای پروژه های سی شارپ دات نت - فصل اول: Delegate ها و Event ها - بخش چهارم: دموی پیاده سازی Delegate

برای ایجاد برنامه مربوط به مطلب زیر یک پروژه Console Application ایجاد می کنیم که در پیوست مطلب نیز قرار دارد.


در اینجا ما تعریف delegate را به شکل زیر داریم:

using System;

namespace DelegatesAndEvents
{
    public delegate string OperationDelegate(string command);

    public class ComputerSystem
    {
        public string StartApplication(string appName)
        {
            Console.Write("Inside ComputerSystem::StartApplication()\n");
            return "Success";
        }

        public string StopApplication(string appName)
        {
            Console.Write("Inside ComputerSystem::StopApplication()\n");
            return "Success";
        }

        public string InstallSoftware(string appName)
        {
            Console.Write("Inside ComputerSystem::InstallSoftware()\n");
            return "Success";
        }

        public string UnInstallSoftware(string appName)
        {
            Console.Write("Inside ComputerSystem::UnInstallSoftware()\n");
            return "Success";
        }

        public void Operation(string name, OperationDelegate oprDelegate)
        {
            Console.WriteLine("Result = {0}", oprDelegate(name));
        }
    }
}

می بینید که ما OperationDelegate را تعریف کرده ایم. این Delegate یک پارامتر از نوع string را به عنوان ورودی گرفته و نوع مقدار بازگشتی آن نیز از نوع string است.
ما کلاس ComputerSystem را داریم و درون آن پنج متد با اسامی StartApplication ، StopApplication ، InstallSoftware ، UninstallSoftware و Operation ایجاد شده است. الان در مثال فعلی با 4 متد اول کار داریم. همانطور که مشاهده می فرمایید هر چهار متد ساختار مشابهی مانند ساختار و تعریف delegate دارند. این متد ها نیز یک string از نوع ورودی گرفته و یک string به عنوان خروجی برمی گردانند.
بنابراین delegate می تواند به این متد ها اشاره کند:

StartApplication, StopApplication, InstallSoftware, UninstallSoftware

به سراغ برنامه Program.cs می رویم.

using DelegatesAndEvents;
ComputerSystem compsysObj = new ComputerSystem();

//User of delegate
OperationDelegate oprDelegate = new OperationDelegate(compsysObj.InstallSoftware);
Console.WriteLine("Result = {0}", oprDelegate("MyApplication"));

oprDelegate = new OperationDelegate(compsysObj.StartApplication);
Console.WriteLine("Result = {0}", oprDelegate("MyApplication"));

oprDelegate = new OperationDelegate(compsysObj.StopApplication);
Console.WriteLine("Result = {0}", oprDelegate("MyApplication"));

oprDelegate = new OperationDelegate(compsysObj.UnInstallSoftware);
Console.WriteLine("Result = {0}", oprDelegate("MyApplication"));

همانطور که می بینید یک شیء از نوع ComputerSystem به نام compsysObj ایجاد کرده ایم و سپس یک نمونه از OperationDelegate به نام oprDelegate ایجاد کرده ایم. متدی که ما داریم کپسوله می کنیم، InstallSoftware است و از همین نمونه ایجاد شده oprDelegate استفاده می کنیم تا متد مربوطه را فراخوانی کنیم و عبارت string ورودی آن را هم "MyApplication" قرار داده ایم. بنابراین این کار متد کپسوله شده InstallSoftware را فراخوانی می کند. پس به سراغ متد زیر که در کلاس ComputerSystem قرار دارد رفته و عبارت "Inside ComputerSystem::StartApplication()" را به عنوان خروجی نمایش خواهد داد.

public string StartApplication(string appName)
{
            Console.Write("Inside ComputerSystem::StartApplication()\n");
            return "Success";
}

و سپس متد StartApplication را کپسوله کرده و با استفاده از همان نمونه ایجاد شده از delegate که oprDelegate بود، برای فراخوانی متد مربوطه که همان StartApplication هست استفاده می کنیم. در خروجی Console عبارت زیر به عنوان خروجی متد نمایش داده خواهد شد:

Inside ComputerSystem::StartApplication()
Result = Success
و سپس متد StopApplication را کپسوله می کنیم و دوباره از نمونه ایجاد شده Delegate به نام oprDelegate استفاده کرده و عبارت “MyApplication” را به عنوان پارامتر به آن پاس می کنیم و این کار نیز
باعث فراخوانی متد StopApplication می شود و در نهایت در خروجی Console عبارت زیر به عنوان خروجی متد نمایش داده خواهد شد:

Inside ComputerSystem::StopApplication()
Result = Success

و در نهایت ما متد UninstallSoftware را کپسوله می کنیم و از نمونه ایجاد شده oprDelegate استفاده کرده و متد مربوطه را فراخوانی می کنیم. بنابراین این بار این کار ما متد UninstallSoftware را فراخوانی خواهد کرد. در نهایت در خروجی Console عبارت زیر به عنوان خروجی متد نمایش داده خواهد شد:

Inside ComputerSystem::UnInstallSoftware()
Result = Success
حال برنامه را ایجاد کرده و خروجی را می بینیم:

Delegate Implementation Demo - Output

پس همانطور که می بینیم، در بار اول که از نمونه Delegate ایجاد شده به نام oprDelegate که برای فراخوانی متد استفاده کردیم، متد InstallSoftware صدا زده شد. پس به سراغ متد InstallSoftware رفته و خروجی زیر نمایش داده شده است.
Inside ComputerSystem::InstallSoftware()
و نتیجه نیز با عبارت Success نمایش داده شده است.
و بار بعدی هم، همانطور که مشاهده می فرمایید، عبارت زیر نمایش داده شده است:
Inside ComputerSystem::StartApplication()
زیرا این بار متد StartApplication فراخوانی شده است و خروجی داخل متد را نمایش داده و نتیجه نیز به صورت عبارت Success نمایش داده شده است.
برای سومین بار هم که خروجی به صورت زیر است:
Inside ComputerSystem::StopApplication()
و دیگر واضح است که این بار متد StopApplication کپسوله شده بوده و متد StopApplication صدا زده شده و خروجی نمایش داده شده مربوط به عملکرد این متد است و نتیجه نیز که طبق موارد قبلی با عبارت Success نمایش داده شده است.
و در نهایت هم که به سراغ UninstallSoftware رفته و خروجی مربوط به این متد نمایش داده شده است.

 


Delegate Implementation Demo - DelegatesAndEvents Delegate Implementation Demo - DelegatesAndEvents

نام را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید