2. 2§. Indeksatorning turi va uning parametrlari turlari haqida


Download 0.67 Mb.
bet14/18
Sana03.02.2023
Hajmi0.67 Mb.
#1151810
1   ...   10   11   12   13   14   15   16   17   18
Bog'liq
19.08 A Tojiyeva Saboxon Dasturlash kurs ishi

3-misol


Ushbu misolda System.DayOfWeek ro'yxati yordamida hafta kunlari nomlarini saqlaydigan sinf e'lon qilinadi . Erişimci kun (nomini oladi , bir mag'lubiyatga qiymati sifatida) va tegishli aniq son qaytaradi. Masalan, 0 ga , 1 ga qaytariladi va hokazo. getDayOfWeek DayOfWeek.SundayDayOfWeek.Monday
C #Nusxalash
using System;
using Day = System.DayOfWeek;


class DayOfWeekCollection
{
Day[] days =
{
Day.Sunday, Day.Monday, Day.Tuesday, Day.Wednesday,
Day.Thursday, Day.Friday, Day.Saturday
};


// Indexer with only a get accessor with the expression-bodied definition:
public int this[Day day] => FindDayIndex(day);


private int FindDayIndex(Day day)
{
for (int j = 0; j < days.Length; j++)
{
if (days[j] == day)
}
}
2.3§.Indeksatorlarda obyektni indekslash.
Indeksatorlar sizga ob'ektlarni indekslash va ma'lumotlarga indeks bo'yicha kirish imkonini beradi. Aslida, indeksatorlar yordamida biz massivlar singari ob'ektlar bilan ishlashimiz mumkin. Ular shakl jihatidan qurilish bloklari xususiyatlariga o'xshashdir getva setular qiymatni qaytarib beradi.
Indeksatorning rasmiy ta'rifi:
Xususiyatlardan farqli o'laroq, indeksatorning nomi yo'q. Buning o'rniga, kalit so'z , bu bo'ladi ko'rsatilgan kvadrat qavs ichida parametrlari tomonidan ta'qib. Indeksator kamida bitta parametrga ega bo'lishi kerak.
Keling, bir misolni ko'rib chiqaylik. Aytaylik, bizda shaxsni ifodalovchi Person klassi va odamlar guruhini ifodalovchi People sinfimiz bor. People sinfini aniqlash uchun indeksatorlardan foydalanish:
Qurilish public Person this[int index]va indeksatorni ifodalaydi. Bu erda biz birinchi navbatda qaytarilgan yoki tayinlangan ob'ekt turini, ya'ni Person tipini aniqlaymiz. Ikkinchidan, parametr orqali int indexelementlarga kirish usulini aniqlaymiz .
Asosan barcha Person ob'ektlari sinfda ma'lumotlar qatorida saqlanadi. Ularni indeks bo'yicha olish uchun indeksatorda get bloki aniqlanadi:
Indeksator Person tipidagi bo'lgani uchun, biz return operatori yordamida get tipidagi ushbu turdagi ob'ektni qaytarishimiz kerak. Bu erda biz turli xil mantiqni aniqlashimiz mumkin. Bunday holda, biz shunchaki ma'lumotlar qatoridan ob'ektni qaytaramiz.
O'rnatilgan blokda biz qiymat parametri orqali uzatilgan Person ob'ektini olamiz va indeks bo'yicha massivga saqlaymiz.

Bitta
2018-04-02 121 2
3
to'rt

set
{
data[index] = value;
}

Shundan so'ng biz People ob'ekti bilan Person ob'ektlari to'plami sifatida ishlashimiz mumkin:

Bitta
2018-04-02 121 2
3
to'rt
besh
6
7
8
9
o'n
o'n bir
12
o'n uch
14

class Program
{
static void Main(string[] args)
{
People people = new People();
people[0] = new Person { Name = "Tom" };
people[1] = new Person { Name = "Bob" };

Person tom = people[0];


Console.WriteLine(tom?.Name);

Console.ReadKey();


}
}

Indeksator kutilganidek parametrlar ko'rinishidagi indekslar to'plamini oladi. Biroq, indekslar int bo'lishi shart emas. Masalan, biz ob'ektni mulk do'koni deb o'ylashimiz va ob'ektning atributi nomini satr sifatida berishimiz mumkin:

Bitta
2018-04-02 121 2
3
to'rt
besh
6
7
8
9
o'n
o'n bir
12
o'n uch
14
15
16
17
o'n sakkiz
19
20
21
22
23
24
25
26
27
28
29
o'ttiz
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

class User
{
string name;
string email;
string phone;

public string this[string propname]


{
get
{
switch (propname)
{
case "name": return "Mr/Ms. " + name;
case "email": return email;
case "phone": return phone;
default: return null;
}
}
set
{
switch (propname)
{
case "name":
name = value;
break;
case "email":
email = value;
break;
case "phone":
phone = value;
break;
}
}
}
}
class Program
{
static void Main(string[] args)
{
User tom = new User();
tom["name"] = "Tom";
tom["email"] = "tomekvilmovskiy@gmail.ru";

Console.WriteLine(tom["name"]); // Mr/Ms. Tom



Console.ReadKey();
}
}



Download 0.67 Mb.

Do'stlaringiz bilan baham:
1   ...   10   11   12   13   14   15   16   17   18




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