Mavzu: Umumlashgan delegatlar, interfeyslar. Reja


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

2. Umumlashgan interfeyslar.
Umumlashgan sinflar va metodlardan tashqari, C# umumlashgan interfeyslardan ham foydalanish mumkin. Bunday interfeyslar umumlashgan sinflarga o'xshash tarzda yaratiladi. Quyida ISeries interfeysi 12 bobdagi misolning o'zgartirilgan ko`rinishi keltirilgan[1,612]. (Eslatib o'tamiz, ISeries butun sonlar ketma-ketni chiqaruvchi sinf uchun interfeys.) Ushbu interfeysi amal bajaruvchi ma'lumotlar tipi parametrlar tipi bilan belgilanadi.
// Umumiy interfeysdan foydalanishning ko`rinishi.
using System;
public interface ISeries {
T GetNext();// navbatdagi sonni qaytaradi
void Reset(); // amallar bajarilayotgan sonli ketma-ketlikning boshlanishiga o`tadi
void SetStart(T v); // boshlang'ich qiymatni belgilash
}
// ISeries interfeysidan amalda foydalanish,
class ByTwos : ISeries < T > {
T start;
T val;
// очередного элемента в ряду последовательных значений.
//Ushbu delegate ketma-ketlikning navbatdagi elementni qiymatini olish uchun //ishlatiluvchi metodning shaklini belgilaydi.
public delegate T IncByTwo(T v);
// Ushbu delegatda ByTwos sinfining konstruktoriga o'tkaziladigan metodga //havola beriladi.
IncByTwo incr;
public ByTwos(IncByTwo incrMeth) {
start = default(T);
val = default(T);
incr = incrMeth;
}
public T GetNext() {
val = incr(val);
return val;
}
public void Reset() {
val = start;
}
public void SetStart(T v) {
start = v;
val = start;
}
}
class ThreeD {
public int х.д, у, z;
public ThreeD(int a, int b, int c) {
x = a;
у = b;
z = c;
}
}
class GenlntfDemo {
// int tipidagi har bir qiymatni ikkitaga oshiruvchi metod aniqlangan.
static int IntPlusTwo(int v) {
return v + 2;
}
// double tipidagi har bir qiymatni ikkitaga oshiruvchi metod aniqlangan.
static double DoublePlusTwo(double v) {
return v + 2.0;
}
// ThreeD tipidagi ob`ektning har bir koordinata qiymatni ikkitaga oshiruvchi //metod aniqlangan.
static ThreeD ThreeDPlusTwo(ThreeD v) {
if (v == null) return new ThreeD(0, 0, 0);
else return new ThreeD(v.x + 2, v.у + 2, v.z + 2);
}
static void Main() {
// int tipida ammallar bajarilayotgan ketma-ketlikning qiymatlarini chiqarish //keltirilgan.
ByTwos < int > intBT = new ByTwos < int > (IntPlusTwo);
for (int i = 0; i < 5; i++)
Console.Write(intBT.GetNext() + " ");
Console.WriteLine();
// double tipida ammallar bajarilayotgan ketma-ketlikning qiymatlarini chiqarish //keltirilgan.
ByTwos < double > dblBT = new ByTwos < double > (DoublePlusTwo);
dblBT.SetStartA1.4);
for (int i = 0; i < 5; i++)
Console.Write(dblBT.GetNext() + " ");
Console.WriteLine();
// ThreeD tipida ammallar bajarilayotgan berilgan ob`ektning koordinata //qiymatlarini chiqarish keltirilgan.
ByTwos < ThreeD > ThrDBT = new ByTwos < ThreeD > (ThreeDPlusTwo);
ThreeD coord;
for (int i = 0; i < 5; i++) {
coord = ThrDBT.GetNext();
Console.Write(coord.x + "," +
coord.у + "," +
coord.z + " ");
}
Console.WriteLine();
}
}

Ushbu kod quyidagi natijani beradi.


2 4 6 8 10
13.4 15.4 17.4 19.4 21.4
0,0,0 2,2,2 4,4,4 6,6,6 8,8,8
Ushbu misoldagi kodda bir qator qiziqarli joylar mavjud. Avvalo, kodning ISeries interfeysi e'lon qilingan qatorga e'tibor beraylik.
public interface ISeries {
Yuqorida aytib o'tilganidek, umumlashtgan interfeysni e'lon qilish uchun umumlashgan sinfni e'lon qilish bilan bir xil sintaksis ishlatiladi.
Endi ByTwos sinfining keyingi e'loniga e'tibor beraylik, u ISeries interfeysini amalga oshiradi.
class ByTwos : ISeries {

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