Mavzu: Umumlashgan delegatlar, interfeyslar. Reja


Download 61.5 Kb.
bet1/3
Sana05.05.2023
Hajmi61.5 Kb.
#1429507
  1   2   3
Bog'liq
Umumlashgan delegatlar


Mavzu: Umumlashgan delegatlar, interfeyslar.
Reja:

  1. Umumlashgan delegatlar.

  2. Umumlashgan interfeyslar.

1. Umumlashgan delegatlar
Xuddi metodlar kabi delegatlar ham umumlashgan bo`lishi mumkin. Pastda umumlashgan delegatni aniqlashning umumiy shakli keltirilgan.
delegate qaytariluvchi_natija_tipi delegate_nomi
(argumentlar_ro_yxati)

Parametrlar tiplari ro'yxatining joylashishiga e'tibor bering. U delegat nomidan keyin to'g'ridan-to'g'ri keladi. Umumlashgan delegatlarning afzalligi shundaki, ular keyinchalik har qanday ular bilan bir xil tipda aniqlangan umumlashgan metod bilan mos kelishi mumkin.
Quyidagi misolida T tipli bitta parametrga SomeOp delegatining qo'llanilishinikeltirilgan. Ushbu delegat T tipdagi qiymatni qaytaradi va T tipda argument qabul qiladi.
// delegatga oddiy misol.
using System;
// umumlashgan delegatning e`lon qilinishi,
delegate T SomeOp < T > (T v);
class GenDelegateDemo {
// argument yig`indisini qaytarish,
static int Sum(int v) {
int result = 0;
for (int i = v; i > 0; i--)
result += i;
return result;
}
// berilgan argumentning teskari tartibidan hosil bo`lgan satrni qaytarish
static string Reflect(string str) {
string result = "";
foreach(char ch in str)
result = ch + result;
return result;
}
static void Main() {
// int tipidagi delegatni tuzish.
SomeOp < int > intDel = Sum;
Console.WriteLine(intDelC));
// string tipidagi delegatni tuzish.
SomeOp < string > strDel = Reflect;
Console.WriteLine(strDel("Привет"));
}
}

Ushbu dastur quyidagi natijani beradi.


6
тевирП
Keling, ushbu dasturni batafsil ko'rib chiqaylik. Avvalo, SomeOp delegatining keyingi e'loniga e'tibor beraylik.
delegate T SomeOp(T v);
Ko'rinib turganidek, SomeOp delegate nomidan keyin turgan bo`lsada T tip qaytariluvchi natijaning tipi hisoblanadi.
Bundan tashqari, GenDelegateDemo sinfida quyida ko'rsatilganidek, Sum() va Reflect() metodlari e'lon qilgan.
static int Sum(int v) {
static string Reflect(string str) {
Sum() metodi argument sifatida uzatilgan butun qiymatga mos yig`indini natija sifatida qaytaradi, va Reflect() metodi— argument sifatida uzatilgan belgili qatorni teskarisiga aylantiradi.
Main() metodida Sum() metodiga havola berilgan delegatning intDel nusxasi yaratiladi.
SomeOp intDel = Sum;
Sum() metodi int tipidagi argument qabul qiladi va shu tipda qiymat qaytaradi, shuning uchun u SomeOp delegatning butun tipli nusxasi bilam mos mos tushadi.
Xuddi shunday, Reflect() metodiga havola berilgan delegatning strDel misoli ham yaratiladi.
SomeOp strDel = Reflect;
Reflect() metodi string tipidagi argument qabul qiladi va shu tipda qiymat qaytaradi, shuning uchun u SomeOp delegatning butun tipli nusxasi bilam mos mos tushadi.
Umumiy xavfsizlikka xos umumlashmalarda ham umumlashgan delegatlarga mos kelmaydigan metodlar berilmaydi. Shunday qilib, kodning keyingi satrida ko'rib chiqilayotgan dasturda xatolik bor.
SomeOp intDel = Reflect; // Xatolik!
Axir, Reflect() metodi argument sifatida string tipida qiymat qabul qiladi va shu tipda natija qaytaradi, shuning uchun SomeOp delegatga butun tip mos kelmaydi.

Download 61.5 Kb.

Do'stlaringiz bilan baham:
  1   2   3




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