Войти Регистрация

Docx

  • Рефераты
  • Дипломные работы
  • Прочее
    • Презентации
    • Рефераты
    • Курсовые работы
    • Дипломные работы
    • Диссертациии
    • Образовательные программы
    • Инфографика
    • Книги
    • Тесты

Информация о документе

Цена 25000UZS
Размер 669.5KB
Покупки 0
Дата загрузки 18 Март 2025
Расширение doc
Раздел Курсовые работы
Предмет Информатика и ИТ

Продавец

G'ayrat Ziyayev

Дата регистрации 14 Февраль 2025

80 Продаж

C# dasturlash tilida delegatlar bilan ishlash

Купить
MUNDARIJA
I .................................................................................................................................. 1
I. KIRISH ................................................................................................................. 2
II. ASOSIY QISM ................................................................................................... 3
2.1 Delegatlar haqida tushuncha ............................................................................................................. 3
2.2 Delegatlar yordamida ulanish metodlarini yozish ............................................................................ 12
2.3 Guruh delegatlari ............................................................................................................................. 15
2.4 Umumiy delegatlar tiplari ................................................................................................................ 16
2.5 Func, Action, Multicast, Anonim metod va Predicate delegatlari .................................................... 18
2.6 Delegatlarning mosligi ..................................................................................................................... 29
2.7 Hodisalar .......................................................................................................................................... 33
................................................................................................................................. 36
III. XULOSA .......................................................................................................... 36
IV. FOYDALANILGAN ADABIYOTLAR ........................................................ 37
I I.  KIRISH
Insoniyat   tarixining   ko‘p   asrlik   tajribasi   ezgu   g‘oyalardan   va   sog‘lom
mafkuradan mahrum biron-bir jamiyatning uzoqqa bora olmasligini ko‘rsatdi. Shu
bois,   mustaqillik   tufayli   mamlakatimiz   o‘z   oldiga   ozod   va   obod   Vatan,   erkin   va
farovon   hayot   barpo   etish,   rivojlangan   mamlakatlar   qatoridan   o‘rin   olish,
demokratik   jamiyat   qurish   kabi   ezgu   maqsadlarni   qo‘ydi.   Bu   esa   kelajagimizni
yaqqol   tasavvur   etish,   jamiyatimizning   ijtimoiy-ma’naviy   poydevorini
mustahkamlash   ehtiyojini   tug‘diradi.   Demak,   galdagi   eng   asosiy   vazifa:   yosh
avlodni   Vatan   ravnaqi,   yurt   tinchligi,   xalq   farovonligi   kabi   olijanob   tuyg‘ular
ruhida tarbiyalash, yuksak fazilatlarga ega, ezgu g‘oyalar bilan qurollangan komil
insonlarni   voyaga   etkazish,   jahon   andozalariga   mos,   kuchli,   bilimli,
raqobatbardosh kadrlar tayyorlashdir. Keyingi yillarda mamlakatimiz ilm-fani ham
axborotlashtirishning   nazariy   asoslariga   katta   hissa   qo‘shib   kelmoqda,   shu   bilan
birgalikda,   hodisalar,   jarayonlarni   yagona   axborot   asosida   tadqiq   etishning   ilmiy
yo‘nalishlarini  tahlil  va sintez  qilish natijasi  bo‘lgan fan-informatikaning vujudga
kelishiga boshlang‘ich nuqta qo‘yildi. 
Kurs   ishining   dolzarbligi:   Ushbu   kurs   ishi   hozirgi   kunda   kompyuterda
berilgan masalalarni dasturlash tillari  orqali yechish va dasturda   delegatlar, uning
funksiyalari ,  maqsadli metodlarga murojaat  va  guruh delegatlari ,  delegatlar hamda
uning   tip   va   parametrlari   mosligi   tushunchalaridan   foydalanish   kabi   vazifalarni
o`rganishga olib keladi. 
Kurs ishining maqsadi:   C #   dasturlash tilida   delegatlar bilan ishlash, hamda
ulanish   metodlarini   delegatlar   yordamida   bog’lash,   guruh   delegatlari   haqida
tushunchalar olish, delegatlar mosligiga turli misollar ishlash.
Kurs ishining ob’ y ekti:  C #  dasturlash tilida  delegatlar bilan ishlash   va uning
funksiyalari haqida o`quvchilarga ma`lumot berishdan iborat. 
Kurs   ishining   predmeti :   C#   dasturlash   tilida   delegatdan   foydalanish
mazmuni.
2 II.  ASOSIY QISM
2.1 Delegatlar haqida tushuncha
Delegatlar   bu-   metodlarni   chaqirish   yo’lini   biladigan   ob’yekt.   Delegatlar
ma’lumotnoma   turi   bo’lib,   ular   ob’yektga   murojaat   qilish   o’rniga   metodga
murojaat   qiladi.   Ya’ni   delegatlar   metodlarning   asosidir   va   ular   yordamida   biz   bu
metodlarni chaqirishimiz mumkin.
Delegatlarni e’lon qilish uchun   delegate   kalit so’zi ishlatiladi, so’ngra qaytish
tipi, nomi va parametrlari kiritiladi. Masalan:
delegate   void   Message();
Delegatlar qaytish turiga ko’ra void tipiga ega, ya'ni hech narsa qaytarmaydi.
Bu   esa   delegat   -   hech   qanday   parametrni   qaytarmaydigan   har   qanday   metodga
ishora qilishi mumkinligini anglatadi.
Misol.
using  System;
namespace  tanishtiruv
{        
        class   Program
        {
                delegate   void  Message();  // delegatni e’lon qilish:
                static   void   Main ( string [] args)
                {
                        Message a;  // delegat o’zgaruvchisini yaratish:
                        if  ( DateTime .Now.Hour <  12 )
                        {
                                a =  GoodMorning ;  // o’zgaruvchiga metod manzilini tayinlash:
                        }
                        else
                        {
3                                 a =  GoodEvening ;
                        }
                        a();  // metodni chaqirish:
                        Console . ReadKey ();
                }
                private   static   void   GoodMorning ()
                {
                          Console . WriteLine ( "Good Morning" );
                }
                private   static   void   GoodEvening ()
                {
                          Console . WriteLine ( "Good Evening" );
                }
        }  
}
Dasturning ishlash jarayoni:
1. Delegatdan foydalanish uchun ushbu delegatning o'zgaruvchisi e'lon 
qilinadi:
Message mes;
2. Delegat o’zgaruvchisi yaratiladi:DateTime.Now.Hour
  xususiyatidan   foydalanib,   hozirgi   soatning   vaqti
olinadi va unga qarab, ma'lum bir metodning manzili delegatga beriladi. Bu
4 metodlar   delegatsiya   bilan   bir   xil   qiymatga   va   parametrlarning   bir   xil
to'plamiga ega.
3. Bu o’zgaruvchiga metod manzili tayinlanadi:
Mes=GoodMorning;
4. Metodni chaqirish: 
mes();
Delegatlar boshqa delegatlarga birlashtirilishi mumkin. 
Masalan:  
using  System;
namespace  birlashtirish
{        
class   program
        {
                delegate   void  mes();
                static   void   Main ()
                {
                        mes a= Hello ;
                        mes b= HowAreYou ;
                        mes c=a+b;
                        c();
                        Console . ReadKey ();
                }
                private   static   void   Hello ()
                {
                        Console . WriteLine ( "Salom" );
                }
                private   static   void   HowAreYou ()
                {
5                         Console . WriteLine ( "Qandaysiz?" );
                }
        }
}
Dastur natijasi:
Bu   holda   c   obyekti   a   va   b   delegatlarining   birligini   anglatadi.   Delegatlar
birlashmasi   a   va   b   delegatlarining   barcha   metodlari   c   delegatining   chaqiruv
ro’yxatiga   kiritilishini   anglatadi   va   c   delegatni   chaqirganda   bu   metodlarning
barchasi bir vaqtning o’zida chaqiriladi.
Bir   xil   metodga   o’zgaruvchini   bir   necha   bor   qo’shish   mumkin.   Buning
natijasida   delegatlarning   chaqiruvlar   ro’yxatida   bir   xil   metodda   bir   necha
o’zgaruvchilar bo’ladi.   Shunga ko’ra, qancha metod qo’shilgan bo’lsa, delegatlar
chaqirilganda shuncha marta chaqiriladi.
Masalan:
using  System;
namespace  yangi_dastur
{
        class   program
        {
                delegate   void  mes();
                static   void   Main ()
                {
                        mes a= Hello ;
6                         a+= HowAreYou ;
                        a+= Hello ;
                        a+= Hello ;
                        a();
                        Console . ReadKey ();
                }
                private   static   void   Hello ()
                {
                        Console . WriteLine ( "Salom" );
                }
                private   static   void   HowAreYou ()
                {
                        Console . WriteLine ( "Qandaysiz?" );
                }
        }
}
Dastur natijasi:
Xuddi   shunday,   delegatlardan   metodlarni   -=   operatsiyasi   yordamida   olib
tashlash mumkin. 
Aslida   delegatlardan   metodlarni   o’chirish   jarayonida   yangi   delegat
yaratiladi.   Unda   metod   chaqiruvlari   ro’yxatida   bitta   kamroq   metod   bo’ladi.   Agar
yo’q   qilish   paytida   bir   delegat   bir   xil   metodga   bir   nechta   o’zgaruvchilarni   olgan
bo'lsa, operatsiya -= qidirishni delegatlarning chaqiruvlar ro'yxati oxiridan boshlab
7 va   faqat   birinchi   topilganlarni   o'chirib   tashlaydi.   Agar   delegatlar   chaqiruv
ro'yxatida   bunday   metod   mavjud   bo'lmasa,   -   =   operatsiyasi   hech   qanday   ta'sir
ko'rsatmaydi.
Masalan:
using  System;
namespace  ayirish
{
        class   program
        {
                delegate   void  mes();
                static   void   Main ()
                {
                        mes a= Hello ;
                        a-= WhatIsYourName ;
                        a+= HowAreYou ;
                        a();
                        Console . ReadKey ();
                }
                private   static   void   Hello ()
                {
                        Console . WriteLine ( "Salom" );
                }
                private   static   void   HowAreYou ()
                {
                        Console . WriteLine ( "Qandaysiz?" );
                }
                private   static   void   WhatIsYourName ()
                {
8                         Console . WriteLine ( "Ismingiz nima?" );
                }
        }
}
Dastur natijasi:
Bu   dastur   ishga   tushganda   1-qadamda   a   o’zgaruvchi   Hello   metodidan
qiymat   qabul   qiladi   va   ekranga   natija   chiqaradi.   2-qadamda   WhatIsYourName
metodining   qiymati   a   o’zgaruvchida   bo’lmagani   uchun   hech   qanday   o’zgarish
sodir bo’lmaydi. 3-qadamda   esa   a   o’zgaruvchi   HowAreYou   metodidan qiymat
qabul qiladi va ekranga natijani chiqaradi.
Delegatni chaqirish metod chaqirish shaklida amalga oshiriladi. Delegatlar bilan
ishlashda eng muhim jihat: delegat va metodlarda qaytish turi bir xil bo’lishi kerak.
Misol sifatida  TRANSFORMER  deb nomlangan delegat turini ko’raylik.
delegate int Transformer (int x);
Transformer  delegati har qanday metod bilan mos keladi, bu  int  tipiga ega va
quyidagi kabi bitta  int   parametrni qabul qiladi:
static int Square (int x) { return x * x; }
Visual 2017 dasturida esa quyidagicha ko’rinishga ega:
static int Square (int x) => x * x;
Quyida bu delegat turiga to’liq misol keltirilgan:
using  System;
using  System.Collections.Generic;
using  System.Linq;
9 using  System.Text;
using  System.Threading.Tasks;
namespace  ConsoleApplication2
{
     delegate   int   Transformer  ( int  x) ;
     class   Test  
     {
         static   void  Main()
         {
             Transformer  t = Square;     // yangi delegat
yaratish
             int  result = t(3);     // delegatni 
chaqirish
             Console .WriteLine (result);     //natija
             Console .ReadKey();
         }
         static   int  Square ( int  x) 
         { 
             return  x*x;
         }
     }  
}
Dastur natijasi:
10 Umuman   olganda,   delegatlar   chaqiruvchi   komponentda   vositachi   sifatida
ishlaydi:   chaqiruvchi   komponent   delegatni   chaqiradi,   shundan   so'ng   esa   delegat
yo’naltirilgan metodni chaqiradi.
Transformer t  =  new Transformer (Square);
Bu ko’rinishning qisqartmasi quyidagicha:
Transformer t  =  Square;
t (3)   ifoda   esa   t . Invoke (3)   ifodasining   qisqartma   shakli.   Agar   delegat
parametrlarni   qabul   qilsa,   bu   parametrlarning   qiymatlari   Invoke   metodiga
o’tkaziladi.  Agar delegat bo'sh bo'lsa, ya'ni uning chaqiruvlar ro'yxatida har qanday
metodga murojaatlar mavjud bo’lmasa, unda bunday delegatni chaqirganda uning
nol   yoki   yo'qligini   Invoke   metodi   va   shartli   null   operatoridan   foydalanib
tekshirish yaxshidir.
Agar   delegat   qiymat   qaytarsa,   chaqiruvlar   ro’yxatidagi   oxirgi   metod
qiymatini qaytaradi. Masalan:  
using  System;
namespace  qaytarish
{
        class   program
        {
                delegate   int  Operation( int  x,  int  y);
                static   void   Main ()
                {
                        Operation a= Ajratish ;
                        a+= Add ;
11                         a+= Multiply ;
                        Console . WriteLine (a( 7 , 2 ));
                        Console . ReadKey ();
                }
                private   static   int   Add ( int  x, int  y)
                {
                        return  x+y;
                }
                private   static   int   Multiply ( int  x, int  y)
                {
                        return  x*y;
                }
                private   static   int   Ajratish ( int  x, int  y)
                {
                        return  x-y;
                }
        }
}
Dastur natijasi:
2 .2 Delegatlar yordamida ulanish metodlarini yozish
Metod   delegat   o'zgaruvchisiga   dastur   ishlashi   davomida   tayinlanadi.   Bu
ulanish metodlarini  yozishda  foydalidir. Quyidagi  misolda butun son  massividagi
12 har   bir   elementga   transformatsiyani   qo'llaydigan   Transform   deb   nomlangan
yordamchi metod mavjud. Transform
  metod i   -   ulanadigan   transformatsiyani   belgilash   uchun
ishlatiladigan delegatlik parametriga ega.
Quyidagi misolni ko’rib o’taylik.
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading.Tasks;
namespace  ConsoleApplication1
{
  public   delegate   int  Transformer ( int  x);  
        class   Until  
        {
                public   static   void   Transform  ( int [] values, Transformer a)
                {
                        for  ( int  i =  0 ; i < values.Length; i++)  
                                values[i] =a (values [i]) ;
                }
        }
        class   Test  
        {
                static   void   Main ()
                {
                        int [] values = {  1 ,  2 ,  3  };
                        Until . Transform  (values,  Add );  
13                         foreach  ( int  i  in  values)
                        Console . Write  (i +  " " );
                        Console . ReadKey ();
                }
                static   int   Add  ( int  x)  
                {
                        return  x + x;
                }
        }
}
Dastur natijasi:
Delegatlar sinfinining xususiyatlari va metodlari.
Metod nomi Vazifasi
Method Delegatlarda belgilangan metod nomini 
qaytaradi.
Target Delegat statik bo'lmagan sinf metodiga 
ishora qilsa, sinf nomini qaytaradi. Agar
delegat statik metodga ishora qilsa, nol 
qiymatni qaytaradi.
Combine();
+() operatori;
+= () operatori; Combine() - bu funksiya. Berilgan 
operator funksiyalari bilan ishlash 
delegatlarni qo’shish va olib tashlash 
14 -() operatori;
-=() operatori kabi ko’rinadi. Ular arifmetik delegatlar 
hisoblanadi.
GetInvocationList() Funksiya murojaatlarining ichki 
ro'yxatiga asoslanib, funksiya tipiga 
mos keladigan massiv yaratadi. Bu 
metodni bo’sh delegatlarga qo’llash 
xatolik keltirib chiqaradi.
object DynamicInvoke
(object[] args) Delegatlar uchun tuzilgan bog’lanishlar 
ro’yxatiga ko’ra funksiyalarning 
bajarilishini ta’minlaydi.
static Remove() Bu statik metod bo’lib, funksiya 
murojaatlarining ichki ro'yxati 
elementlarini o’chirishni ta’minlaydi.
2 .3  Guruh delegatlari
Barcha   delegatlikka oid   misollarda    guruhga     murojaat   qilish    mavjud.
Bu   delegatlik  namunasi   nafaqat   bitta  maqsadli   metodga,  balki   maqsadli   metodlar
ro'yxatiga ham murojaat qilishi mumkinligini anglatadi.
Delegatlar misollari + = operatsiyasi yordamida birlashtiriladi.
Masalan:
SomeDelegate d = SomeMethodl; d += SomeMethod2;
Oxirgi qator funksional ravishda quyidagi satrga mos keladi:
d = d + SomeMethod2;
Endi   d   ga   murojaat     qilish   SomeMethod1   va   SomeMethod2   metodlarini
chaqiradi.
-   va   -   =   operatsiyalari   delegatning   chap   operandidan   o'ng   operandasini   olib
tashlaydi.
d -= SomeMethod1;
15 Nol   qiymati   bo'lgan   delegatlik   o'zgaruvchisiga   +   =   operatsiyasini   qo'llash
haqiqiy va bu o'zgaruvchiga yangi qiymat tayinlashga tengdir:
SomeDelegate d =  null ;        
d += SomeMethod1;
Xuddi   shunday,   bitta   maqsadli   metod   bilan   delegatlik   o'zgaruvchisiga   -   =
amalini qo'llash bu o'zgaruvchini  null  ga tenglashtirishga tengdir.
Delegatlar   o'zgarmasdir,   shuning   uchun   +   =   yoki   -   =   amallaridan
foydalanish   dasturdagi   o'zgaruvchiga   tayinlangan   yangi   delegat   namunasini
yaratadi.   Agar   guruh   delegati   void   dan   boshqa   qaytish   tipiga   ega   bo'lsa,   u   holda
chaqirilayotgan   komponent   chaqirilayotgan   oxirgi   metoddan   qaytish   qiymatini
oladi.   Oldingi   metodlar   hali   ham   chaqiriladi,   ammo   ularning   qaytarilish   qiymati
bekor qilinadi.
Ko'pgina   holatlarda   guruh   delegatlari   void   qaytish   tiplariga   ega,   shuning   uchun
bunday   xatoliklar   yuzaga   kelmaydi.   Barcha   delegatlik   turlariSystem.Delegate
  dan   meros   bo'lgan  	System.MulticastDelegate
sinfidan olingan. 
2.4 Umumiy delegatlar tiplari
Delegatlar tipida umumiy tipdagi parametrlar bo'lishi mumkin. Masalan:
public  delegate  Т  Transformer<T> ( Т  arg);
Ushbu ta'rifga ega bo'lgan  holda, har  qanday  tipda ishlaydigan, umumlashtirilgan
Transform   yordamchi funksiyasini yozish mumkin:
Misol uchun:
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading.Tasks;
namespace  ConsoleApplication2
16 {
     public   delegate  T  Transformer <T>(T arg);
     public   class   Until
     {
         public   static   void  Transform<T>(T[] values, 
Transformer <T> t)
         {
             for  ( int  i = 0; i < values.Length; i++)
                 values[i] = t(values[i]);
         }
         class   Test
         {
             static   void  Main()
             {
                 int [] values = { 1, 2, 3 };
                 Until .Transform(values, Square);
                 foreach  ( int  i  in  values)
                     Console .Write(i +  " " );
                 Console .ReadKey();
             }
             static   int  Square( int  x)
             {
                 return  x * x;
             }
         }
17      }
}
Dasturning visual studiodagi natijasi:
2.5 Func, Action, Multicast, Anonim metod va Predicate  delegatlari
C# da Func delegati
Func  - bu  System  nomlar maydoniga kiritilgan umumiy delegat. U nol yoki
undan ko'p kirish parametrlariga va bitta chiqish parametriga ega. Bu delegat  tipi
qiymatni qaytaradi.
Oxirgi   parametr   tashqi   parametr   sifatida   ko'rib   chiqiladi.   Func   delegati
System  nomlar maydonida quyidagicha aniqlanadi:
namespace  System
{    
     public   delegate  TResult Func< in  T,  out  TResult>(T arg);
}
<   >   ichidagi   oxirgi   parametr     qaytish   tipi   sifatida   qabul   qilinadi   va   qolgan
parametrlar quyida ko'rsatilgandek kirish parametrlari tipi sifatida qabul qilinadi.
TResult -qiymat qaytarish tipi;
T -birinchi kirish parametrining tipi.
Ikkita kirish parametrlari va bitta chiqish parametrlari bo'lgan  Func  delegati
quyida keltirilgan.
namespace  System
{        
18         public   delegate   TResult  Func< in   T1 , in   T2 ,  out   TResult >( T1  arg1,  T2  arg2);
}
Bu yerda:
TResult -qiymat qaytarish tipi;
T1 -birinchi kirish parametrining tipi.
T2 -ikkinchi kirish parametrining tipi.
Quyidagi   FUNC   tipidagi delegat int turining ikkita kiritish parametrini oladi
va int turining qiymatini qaytaradi. Bu delegatga ikkita int parametrini oladigan va
int qiymatini qaytaradigan har qanday metodni tayinlash mumkin.
Func < int ,  int ,  int > sum;
Misol:
using  System;
namespace  Func
{
        class   Program
        {
                static   int   Sum ( int  x,  int  y)
                {
                        return  x + y;
                }
                static   void   Main ( string [] args)
                {
                        int  a,b;
                        Console . WriteLine ( "Birinchi son: a=" );
                        a= int . Parse ( Console . ReadLine ());
                        Console . WriteLine ( "Ikkinchi son: b=" );
                        b= int . Parse ( Console . ReadLine ());
                        Func< int , int ,  int >  add  =  Sum ;
19                         int  result =  add (a, b);
                        Console . WriteLine ( "Yig'indi "  +result+  " ga teng." );
                        Console . Read ();
                }
        }
}
Dasturning natijasi:
Func   delegati   tipiga   har   xil   tipdagi   0   dan   16   tagacha   kirish   parametrlari
kiritilishi mumkin.   Ammo natija bitta parametrni o'z ichiga olishi kerak.   Masalan,
quyidagi   Func   delegati   hech   qanday   kiritish   parametriga   ega   emas,   faqat
parametrni o'z ichiga oladi.
Func < int > getRandomNumber;
Yana shuni bilish talab qilinadiki,  Func  delegati parametrlarni rad etish va
o'chirishga   ruxsat   bermaydi.   Func   delegati   tipidan   anonim   metod   yoki   lambda
ifodasi bilan foydalanish mumkin.
C# da Action delegati
Action   -   System   nomlar maydonida belgilangan delegat  tipidir.   Action
delegat   tipi   Func   delegati   bilan   bir   xil,   faqat   u   qiymat   qaytarmaydi.   Boshqacha
qilib   aytganda,   Action   delegatidan   qaytish   tipi   mavjud   bo'lgan   metod   bilan
foydalanish mumkin. Quyidagi delegat int qiymatini chiqaradi.
Misol:
20 using  System;
namespace  Action
{
        class   Program
        {
                public   delegate   void  Print( int  val);
                static   void   ConsolePrint ( int  i)
                {
                        Console . WriteLine (i);
                        Console . ReadKey ();
                }
                static   void   Main ( string [] args)
                {                      
                        Print val =  ConsolePrint ;
                        val( 100 );
                }
        }
}
Yuqoridagi   Print   delegatini   belgilash   o'rniga   Action   delegatidan
foydalanish mumkin.
Masalan:
using  System;
namespace  Action
{
        class   Program
        {
                static   void   ConsolePrint ( int  i)
21                 {
                        Console . WriteLine (i);
                        Console . Read ();
                }
                static   void   Main ( string [] args)
                {
                        Action< int > printActionDel =  ConsolePrint ;
                        printActionDel( 100 );
                }
        }
}
Dastur natijasi:
Yangi   kalit   so'zdan   foydalangan   holda   yoki   to'g'ridan-to'g'ri   metodni
tayinlab,  Action  delegatini ishlatish mumkin:
Action < int > printActionDel = ConsolePrint;
Yoki:
Action < int > printActionDel =  new
Action < int >(ConsolePrint);
Action   delegati   har   xil   tipdagi   16   kirish   parametrlarini   qabul   qilishi
mumkin. Shuningdek, anonim metod  Action  delegatiga tayinlanishi mumkin. 
Masalan:
using  System;
namespace  Action1
22 {
        class   Program
        {
                static   void   Main ( string [] args)
                {
                        Action< int > printActionDel =  delegate ( int  i)
                        {
                                  Console . WriteLine (i);
                                  Console . ReadKey ();
                        };
                        printActionDel( 10 );
                }
        }
}
Dastur natijasi:
Lambda ifodasi ham  Action  delegati bilan ishlatilishi mumkin:
Masalan:
using  System;
namespace  Action2
{
        class   Program
        {
                static   void   Main ( string [] args)
23                 {
                        Action< int > printActionDel = i =>  Console . WriteLine (i);
                        printActionDel( 10 );
                        Console . ReadKey ();
                }
        }
}
Dastur natijasi:
Shunday   qilib,   Action   delegat   tiplari   bilan   qiymatni   qaytarmaydigan   har
qanday   metoddan   foydalanish   mumkin.   Action   delegati   hech   narsa   qaytarib
bermaydi, ya’ni   void qaytish tipiga ega. U 1 dan 16 tagacha kirish parametrlariga
ega   bo'lishi   mumkin.   Bu   delegat   tipi   anonim   metod   yoki   lambda   ifodalari   bilan
ishlatilishi mumkin.
C# da Multicast delegati
Bir   nechta   metodlarga   ishora   qilishuvchi   delegatlar   tipiga     Multicast
delegat   tipi   deyiladi.   “+”   operatori   delegat   ob’yektiga   funksiya   qo’shadi,   “-“
operatori esa ob’yektdan mavjud funksiyani olib tashlaydi.
Misol:
using  System;
namespace  Multicast
{
        class   Program
24         {
                public   delegate   void  Print( int  value);
                static   void   Main ( string [] args)
                {              
                        Print printDel =  PrintNumber ;
                        printDel +=  PrintHexadecimal ;
                        printDel +=  PrintMoney ;
                        printDel( 1000 );
                        printDel -= PrintHexadecimal ;
                        printDel( 2000 );
                }
                public   static   void   PrintNumber ( int  num)
                {
                        Console . WriteLine ( "Raqam: {0}" ,num);
                        Console . ReadKey ();
                }
                public   static   void   PrintMoney ( int  money)
                {
                        Console . WriteLine ( "Pul: {0} so'm" , money);
                        Console . ReadKey ();
                }
                public   static   void   PrintHexadecimal ( int  dec)
                {
                        Console . WriteLine ( "Qiymat: {0}" , dec);
                        Console . Read ();
                }
25         }
}
Dastur natijasi:
Yuqoridagi misolda  Print  delegatlari ko'p darajali delegatga aylanadi,
chunki u uchta metodga -  PrintNumber ,  PrintMoney  va
PrintHexadecimal  ga ishora qiladi.   Shunday qilib,  printDel  ni ishlatish
barcha metodlarni ketma-ket ishlatadi.
C# da Anonim metodi
C # ichidagi anonim metodlar  delegate  kalit so'zidan foydalanib aniqlanadi
va ular delegatlar tipidagi o'zgaruvchiga tayinlanishi mumkin.
Masalan:
using  System;
namespace  Anonim_metod
{
        class   Program
        {
                public   delegate   void  Print( int  value);
                static   void   Main ( string [] args)
                {
                        Print print =  delegate ( int  val)  
                        {
                                Console . WriteLine ( "Qiymat: {0}" , val);  
26                                 Console . ReadKey ();
                        };
                        print( 100 );
                }
        }
}
Dastur natijasi:
Anonim   metodlar   tashqi   funksiyada   belgilangan   parametrlarga
kirishlari mumkin.
Misol:
using  System;
namespace  Anonim_metod2
{
        class   Program
        {
                public   delegate   void  Print( int  value);
                static   void   Main ( string [] args)
                {
                        int  i =  10 ;
                        Print prnt =  delegate ( int  val)  
                        {
                                val += i;
                                Console . WriteLine ( "Natija: {0}" , val);
27                                 Console . Read ();
                        };
                        prnt( 100 );
                }
        }
}
Dastur natijasi:
Anonim metodlar   goto ,  break  yoki   continue  kabi o’tish operatorlarini
o'z   ichiga   olmaydi.   Uni   operatorning   chap   tomonida   ishlatish   mumkin   emas.
Undan hodisalarni qayta ishlash vositasi sifatida foydalanish mumkin.
C# da Predicate delegati
Predicate   -   Func   va   Action   delegatlari   kabi   delegatdir.   U   mezonlar
to'plamini   o'z   ichiga   olgan   metodni   anglatadi   va   berilgan   parametr   ushbu
mezonlarga mos keladimi yoki yo'qligini tekshiradi.  Predicate  delegatlik metodlari
bitta kirish parametrini qabul qilishi va mantiqiylikni qaytarishi kerak –   true   yoki
false .   Predicate   delegati   System   nomlar   maydonida   quyida   ko'rsatilgan   tarzda
aniqlanadi:
public   delegate   bool  Predicate< in   T >( T  obj);
Boshqa delegat tiplari singari, Predicate ham anonim metod yoki lambda 
ifodasi bilan ishlatilishi mumkin.
Misol:
28 using  System;
namespace  predicate
{
        class   Program
        {
                static   bool   IsUpperCase ( string  str)
                {
                        return  str. Equals (str. ToUpper ());
                }
                static   void   Main ( string [] args)
                {
                        Predicate< string > isUpper =  IsUpperCase ;
                        bool  result = isUpper( "Salom qadrdonlarim!!!" );
                        Console . WriteLine (result);
                        Console . ReadKey ();
                }
        }
}
Dastur natijasi:
2.6 Delegatlarning mosligi
Tiplarning  mosligi
Delegatlarning   barcha   tiplari   bir   xil   imzoga   ega   bo'lsa   ham   bir-biriga   mos
kelmaydi. 
29 Masalan:
delegate   void  Dl();   delegate   void  D2();
               Dl dl = Methodl;
               D2 d2 = dl;         //     Kompilyatsiya     qismidagi     xatolik
Biroq, quyidagi kodga ruxsat beriladi:
D2 d2 =  new  D2 (dl) ;
Delegatlik   namunalari   bir   xil   maqsad   metodlariga   ega   bo'lsa   teng   deb
hisoblanadi.
 Misol:
delegate   void  D();
D dl = Methodl;
D d2 = Methodl;
Console .WriteLine (dl == d2) ;  // Rostlik holati
Guruh   delegatlari   bir   xil   tartibda   bir   xil   metodlarga   murojaat   qilsalar   teng
deb hisoblanadi.
Parametrlarning mosligi
Metodga     murojaat     qilinganda   bu   metodning   parametrlari   uchun
belgilanganlarga   qaraganda   aniqroq   tipdagi   ma’lumotlar   keltirish   mumkin.   Bu
umumiy polimorfik xatti-harakatlar.
Xuddi shu sabablarga ko'ra, delegat o'z maqsadli metodiga qaraganda aniqroq 
parametr tiplariga ega bo'lishi mumkin. Bunga  qarama-qarshilik  deyiladi.
Misol:
using  System;
namespace  parametr_tiplari
{
        delegate   void  StringAction ( string  s);  
        class   Test  
30         {
                static   void   Main ()
                {
                        StringAction d =  new  StringAction ( ActOnObject );  
                        d ( "Salom dunyo" );
                }
                static   void   ActOnObject  ( object  o)  
                {
                        Console . WriteLine  (o);  // Salom dunyo
                        Console . ReadKey ();
                }
        }
}
Dastur natijasi:
Delegat   metodni   shunchaki   boshqasi   nomidan   chaqiradi.   Bunday   holda
StringAction     string   turining argumenti bilan chaqiriladi. Keyin   argument
maqsad metodiga o'tkazilsa, u aniq ravishda  object  ga ko'chiriladi.
Qaytish tipining mosligi
Metod   chaqiruvi   natijasida   so'ralganidan   aniqroq   tipni   qaytarib   olish
mumkin.   Bu   umumiy   polimorfik   xatti-harakatlar.   Xuddi   shu   sabablarga   ko'ra,
delegatning   maqsadli   metodi   o'zi   tomonidan   tavsiflanganidan   ko'ra   aniqroq   tipni
qaytarishi mumkin. Bunga  k ov ariat siy a  deyiladi. 
31 Masalan:
using  System;
namespace  qaytish_tipi_mosligi
{
        delegate   object  ObjectRetriever();
        class   Test
        {
                static   void   Main ()
                {
                        ObjectRetriever o =  new  ObjectRetriever ( RetrieveString );
                        object  result = o();
                        Console . WriteLine  (result);  // guldasta
                        Console . ReadLine ();
                }
                static   string   RetrieveString ()  
                {
                        return   "guldasta" ;
                }
        }
}
Dastur natijasi:
32 ObjectRetriever   delegati   object   ni   qaytarib   olishni   kutadi,   ammo
object   ning   kichik   sinfini   ham   olish   mumkin,   chunki   delegatlarning   qaytish
tiplari kovariantdir.
2.7 Hodisalar
Delegatlardan   foydalanilganda,   odatda   ikkita   mustaqil   qism   paydo   bo'ladi:
takrorlovchi va abonent.
Takrorlovchi  - delegatlar maydonini o'z ichiga olgan bir tip.
Takrorlovchi delegatga   murojaat    qilib, qachon yetkazib berish kerakligini
aniqlaydi.
Abonentlar  - maqsadli qabul qilish metodlari.
Abonent takrorlovchi  delegatidagi   + =  va  - =  operatsiyalaridan foydalanib,
jarayonni   qachon   boshlash   va   to'xtatish   to'g'risida   qaror   qabul   qiladi.   Abonent
boshqa   abonentlar   haqida   hech   narsa   bilmaydi   va   ularning   ishlariga   xalaqit
bermaydi.
event   konstruktsiyasi   faqat   “takrorlovchi   /   abonent”   modeli   tomonidan
talab  qilinadigan   delegatlar   imkoniyatlari   to'plamini   ochadi.   Hodisalarning  asosiy
maqsadi - abonentlarning bir-biriga ta'sir qilishining oldini olish. 
Hodisani e'lon qilishda kalit so'z hodisa delegati oldiga qo'yiladi:
public   delegate   void  PriceChangedHandler ( decimal  oldPrice,  decimal  newPrice);
public   class   Broadcaster
        {
  public   event  PriceChangedHandler PriceChanged;                  // Hodisani     e’lon 
qilish
         }
Broadcaster   tipidagi kod   PriceChanged   a'zosiga to'liq kirish huquqiga ega
va uni delegat sifatida qabul qilishi mumkin.
33 Broadcaster  tashqarisidagi kod faqat   PriceChanged  hodisasida   + =   va  - =
operatsiyalarni bajarishi mumkin. 
"+ =" operatoridan foydalangan holda hodisaga qo’shilish;  
"- =" operatori yordamida hodisani bekor qilish mumkin.
Hodisa ni   boshqaradigan   funksiya   event   handler   deb   ataladi.
Hodisalarni   ishlab   chiqaruvchisi   hodisa   delegati   e'lon   qilgan   imzoga   ega   bo'lishi
kerak. Hodisalar   handler   funksiyasiga o'tkaziladigan argumentlarga ega bo'lishi
mumkin. Ular   static ,   virtual ,   sealed   va   abstract   deb e'lon qilinishi mumkin. Agar
abonent bo'lmasa,  Hodisa  lar ishlamaydi.
Misol:
using  System;
namespace  Hodisalar
{
        public   delegate   void  PriceChangedHandler ( decimal  oldPrice,  decimal  
newPrice);  
        public   class   Stock  
        {
                string   symbol ;  decimal   price ;
                public   Stock  ( string  symbol)  
                {  this . symbol  = symbol; }  
                public   event  PriceChangedHandler PriceChanged;
                public   decimal  Price  
                {
                        get  
{ 
return   price ; 
}  
34 set  
{
                    if  ( price  ==  value )  return ;         // hech narsa o'zgarmasa chiqadi
                    decimal  oldPrice =  price ;  price  =  value ;
                    if  (PriceChanged !=  null )                                        
PriceChanged (oldPrice,  price );
}
                }
        }
}
35  
III. XULOSA
C#    Windows   muhitida  ishlaydigan  dastur  tuzish   uchun  qulay  vosita   bo`lib,
kompyuterda   dastur   yaratish   ishlarini   avtomatlashtiradi,   xatoliklarni   kamaytiradi
va   dastur   tuzuvchi   mehnatini   yengillashtiradi.   C#   dasturi   zamonaviy   visual
loyihalash   texnologiyasi   asosida   ob`yektga   yo`naltirilgan   dasturlash   tili
hisoblanadi.
Hozirgi kunda C# dasturlash tili yuqori bosqichli dasturlash tillari ichida eng
samaralisi   hisoblanadi.   Bu   til   C   va   C++   dasturlash   tillarining   mantiqiy   davomi
bo’lib,   Java   dasturlash   tilining   ham   bir   qancha   imkoniyatlarini   o’zida
mujassamlashtiradi.   Bugunga   kelib,   juda   ko’p   rivojlangan   davlatlarda   ishlab
chiqarilayotgan dasturlar asosini C# dasturlash tili tashkil qiladi.
Bu kurs ishi davomida men C# dasturida delegatlarning ko’rinishi, ular bilan
C#   va   Visual   studioda   ishlash,   delegatlarga   aloqador   bo’lgan   metodlar,   guruh
delegatlarida   misollar   ishlash,   qiymat   qaytarish,   delegatlar   yordamida   metodlarni
birlashtirish,   ba’zi   funksiyalarda   delegatlarning   qo’llanilishi   haqida   bilim   va
ko’nikmalarga   ega   bo`ldim.   Delegatlarning   Func,   Action,   Multicase,   Anonim
metodlar   va   Predicate   tiplari   bilan   ishlashda   ularning   tiplarini   ma’lum   qoidalar
asosida almashtirish ham mumkin. Faqat ularning qaytish tiplarini moslash kifoya.
Yana   kurs   ishimning   davomida   mavzuga   doir   turli   ko’rinishdagi   testlardan
ham   foydalandim.   Standart   bo’lmagan   testlarni   yechish   davomida   mavzuni
o’rganuvchilar   delegatlar   to’g’risida   yana  ham   mukammalroq  tushunchalarga   ega
bo’ladi. Dasturning ishlash qismidagi jarayonlarni tahlil qilishi qulayroq bo’ladi. 
Xulosa   qilib   aytganda,   C#   dasturlash   tilida   delegatlardan   foydalanib   turli
xildagi   metodlar   bilan   ishlash   mumkin.   Bu   esa   dasturchining   tezkor   ishlash
imkoniyatini   bir   muncha   oshirishga   yordam   beradi.   Shu   bilan   bir   qatorda
delegatlar   bilan   ishlash   katta   hajmli   masalalarni   yechishda   bir   qancha   qulayliklar
tug’diradi.
36 I V.  FOYDALANILGAN ADABIYOTLAR
1. Г ерберт  Ш илдт . C# 4.0  П олное   руководство .  Москва. Санкт-Петербург.
Киев.   2011, 473-б.
2. Джозеф   Албахари   и   Бен   Албахари.   C#   6.0   Справочник .   Полное
описание языка .     Москва. Санкт-Петербург. Киев.  2016, 151-б.
3. Борис   Пахомов .   C#   для   начинающих.   Санкт-Петербург   «БХВ-
Петербург» .  2014 , 293-б.
4. А.Л.Марченко.   C#.   Введение   в   программирование .   Издательство
Московского университета. 2005,  88- б .
5. Object-oriented   Programming   in   C#.   Department   of   Computer   Science,
Aalborg University.  February 2010 ,  173- б .
6. В. В. Подбельский.  Язык C#. Базовый курс.  Москва – 2013 ,  342- б .
7. Интернет-Университет Информационных Технологий. 16-б.
8. Svetlin   Nakov,   Veselin   Kolev.   Fundamentals   of   Computer   Programming
with C#. 2013, 923- б .
INTERNET SAYTLARI
1. www.ziyonet.uz   
2. www.intuit.ru   
3. www.tuit.uz   
4. www.tuit.kf.uz   
5. www.referat.uz   
37
Купить
  • Похожие документы

  • Access dasturi yordamida “dorixona” ma‘lumotlar bazasini yaratish
  • Agile va Scrum metodologiyalari dasturiy ta'minot ishlab chiqish
  • Tashkilot miqyosida masofadan muloqot qilish.
  • Talabalar haqida ma'lumot saqlovchi tizim
  • HTML tili, uning asosiy elementlari. Jadval va rasm hosil qilish. Gipermatn va freymlar joylashtirish

Подтвердить покупку

Да Нет

© Copyright 2019-2025. Created by Foreach.Soft

  • Инструкция по снятию с баланса
  • Контакты
  • Инструкция использования сайта
  • Инструкция загрузки документов
  • O'zbekcha