Ц # делегати туториал и пример

Ц # делегати омогућава коришћење метода као објекат. То значи да сте у могућности да прође метод као аргумент за неку другу методу. То се ради указујући делегата на методу и доношење делегат као аргумент. Затим помоћу делегата сте у стању да позове метод да се делегат је окренута на.

Користан дио делегата тако метода мозе бити пренета са једног објекта на други.

Као што знамо метод представља неку врсту акције да се објекат може да уради. Та акција се спроводи у дефиницији метода самог унутар класе проглашен метод. Са делегат имплементација метода или део поступка садржана у класи, могу делегирати друге класе.

овде, имамо једноставан пример да разуме делегата. Имамо класу Плаилист који омогућава да додате песме у листу за репродукцију. Листе нумера класа даје метод који се зове СховПлаилист да исписује све песме у листу нумера.

класа плејлисту
{
     // code eliminated for brevity
     
    public void ShowPlaylist()
    {
          за сваки (Песма песма у тхис.лист)
          {
               Цонсоле.ВритеЛине("Назив песме: {0}". назив песме);       
          }
    }

}

Методом плејлисту класа СховПлаилист ће добити пуну нумера штампани.

Хајде да уведе делегата у Плаилист класи. Коришћење делегата ће омогућити потрошач на Плаилист класе да спроведе логику за приказ листе за репродукцију.

Овде смо прогласити делегат у Плаилист класе која има пева параметар типа Сонг

класа плејлисту
{
     // Код елиминисана ради краткоће
     // delegate for showing song
     public delegate bool ProcessPlaylistDelegate(Сонг Сонг);

...

Ми треба да подесите СховПлаиЛист() метод користи ПроцессПлаилистДелегате. Метод СховПлаиЛист узима ПроцессПлаилистДелегате као параметар. Сада можемо обрадити Плаилист пре штампања.

        //show the playlist using another function attached to ProcessPlaylistDelegate
        public void ShowPlaylist(ПроцессПлаилистДелегате процессПлаилист)
        {
            за сваки (Песма песма у тхис.лист)
            {
                ако (процессПлаилист(песма))
                {
                    Цонсоле.ВритеЛине("Назив песме: {0}", назив песме);
                }
            }
        }

Сада ова класа може да пренесе било обраду на други начин док повратни тип и тип параметар одговара делегат. Испод програма класе користи Плаилист класа. Ми изјављујемо нови Плаилист.ПроцессПлаилистДелегате, а онда смо се прикључивањем гетМп3Сонгс до делегату.

    класа програм
    {
        воид Главна(низ[] аргс)
        {
             Плаилист плаилист1 = ново плејлиста();

             //add some songs to the playlist

             //use the delegate to process the list before it is printed on the screen
             playlist1.ShowPlaylist(novi Плаилист.ПроцессПлаилистДелегате(ГетМп3Сонгс));
        }

  }

Испод је дефиниција гетМп3Сонгс метода. Овај метод само враћа мп3 сонгс. Стога је СховПлаилист ће они одштампати мп3 сонгс.

        публиц статиц боол ГетМп3Сонгс(Сонг Сонг)
        {
            //more logic goes here
            return (сонг.Формат == "mP3");
        }

Моћ делегата дешава када можемо обрадити нумера различито без додирне Плаилист класу. Испод изјављујемо 2 друге методе у класи програма.

публиц статиц боол ГетЦдСонгс(Сонг Сонг)
 {
 //more logic goes here
 return (сонг.Формат == "ЦД");
 }

публиц статиц боол ГетАллСонгс(Сонг Сонг)
 {
 //more logic goes here
 return true;
 }

Сада само треба да приложи ово да делегатима у главном методом. Ове методе ће различито обрадити плаилист. Први метод ће обухватити само цд песама, а други метод ће обухватити све песме. Ово је само једноставан пример, али можемо додати онолико обраду као што захтева без потребе да додирне класе Плаилист.

            плаилист1.СховПлаилист(novi Плаилист.ПроцессПлаилистДелегате(ГетЦдСонгс));

            плаилист1.СховПлаилист(novi Плаилист.ПроцессПлаилистДелегате(ГетАллСонгс));


Довнлоад

Оставите одговор