Masalan: using System;
namespace yangi_dastur
{
class program
{
delegate void mes();
static void Main()
{
mes a=Hello;
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 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()
{
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;
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;
}
}
}