Interfeys toifalari tushunchasi Interfeys toifalarni abstract bazaviy sinflar bilan taqqoslash Maxsus interfeyslarni kiritish


public delegate int BinaryOp(int x, int y)


Download 0.77 Mb.
bet31/50
Sana26.01.2023
Hajmi0.77 Mb.
#1129439
1   ...   27   28   29   30   31   32   33   34   ...   50
Bog'liq
MAVZULAR UMUMIY

public delegate int BinaryOp(int x, int y);
C# kompilyatori delegat toifasiga ishlov berganida, avtomatik tarzda muhrlangan (sealed) sinfini yaratadi, System.MulticastDelegate sinfi vorisi sifatida. Bu sinf ( o’z asos sinfi System.Delegate bilan muvofiq tarzda) delegat uchun kelgusida chaqiriladigan metodlar ro’yhatini saqlashga imkon beruvchi zarur infrastruktrani taqdim etadi.
Kompilyator yaratadigan BinaryOp sinfi uchta ochiq metodni aniqlaydi. Ular ichida asosiysi Invoke(), chunki u sinxron tartibda delegat ob’yekti qo’llab-quvvatlaydigan har bir metodni chaqirishda ishlatiladi; bu degani – chaqiruvchi kod o’z ishini davom ettirishdan oldin chaqiruv tugashini kutishi kerak deganidir. Yana bir g’aroyib jixat shuki, Invoke () sinxron metodi siz yozgan C# kodida oshkor chaqirilishga muhtoj emas. Keyinroq ayon bo’ladki, siz tegishli sintaksisni qo’llaganingizda Invoke () metodi “parda ortida” chaqiriladi.
Beginlnvoke () va Endlnvoke () metodalari esa alohida ijro oqimida joriy metodni asinxron tarzda chaqirish imkonini ta’minlaydi. Agar sizda ko’p oqimlar bilan ishlash tajribasi bo’lsa, u holda sizga ma’lumki, dastur yaratuvchilarni ikkilamchi ijro oqimlarini tuzishga majbur qiladian narsa (sabab) – o’zining yakunlanishi uchun ma’lum vaqt talab qiladigan metodlarni chaqirishga bo’lgan zaruratdir. Garchi .NET bazaviy sinflari kutubxonasida ko’poqimli va parallel dasturlashga mo’ljallangan bir qancha ismlar fazosi taqdim etilsa-da, delegatlar bunday vazifani tayyor holda taqdim etadilar.
Xo’sh, kompilyator nimaning evaziga Invoke (), Beginlnvoke () va Endlnvoke () metodlarini qanday aniqlashni biladi? Jarayonni anglash uchun quyida kompilyator yaratgan BinaryOp sinfining kodi keltirilgan (yarimsemiz kursiv bilan delegat toifasi e’lonida ko’rsatilgan elementlar ajratilgan):
sealed class BinaryOp : System.MulticastDelegate
{
public int Invoke(int x, int y) ;
public IAsyncResult Beginlnvoke(int x, int y,
AsyncCallback cb, object state);
public int Endlnvoke(IAsyncResult result);
}

Delegat e’loniga boshqa misol:



Download 0.77 Mb.

Do'stlaringiz bilan baham:
1   ...   27   28   29   30   31   32   33   34   ...   50




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling