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);
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;
-() operatori;
-=() operatori
|
Combine() - bu funksiya. Berilgan operator funksiyalari bilan ishlash delegatlarni qo’shish va olib tashlash 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;
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 turlari System.Delegate dan meros bo'lgan System.MulticastDelegate sinfidan olingan.
Do'stlaringiz bilan baham: |