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


I.BOB. Indeksatorlar haqida umumiy ma’lumot va uning xossalari


Download 0.67 Mb.
bet3/18
Sana03.02.2023
Hajmi0.67 Mb.
#1151810
1   2   3   4   5   6   7   8   9   ...   18
Bog'liq
19.08 A Tojiyeva Saboxon Dasturlash kurs ishi

I.BOB. Indeksatorlar haqida umumiy ma’lumot va uning xossalari.
1.1§. Indeksator haqida umumiy ma’lumot.
Indeksator uchun indeksatorlar e'lon qilinishi mumkin . Interfeys indeksatorlarining kiruvchilar sinf indeksatorlarining kiruvchilaridan quyidagicha farq qiladi:

  • Interfeysga kiruvchi vositalar modifikatorlardan foydalanmaydi.

  • Interfeysga kirish moslamasi odatda tanaga ega emas.

Accessor usullari indeksator o'qish / yozish, faqat o'qish yoki yozish uchun ishlatilishini ko'rsatishi kerak. Siz interfeysda aniqlangan indeksator uchun dasturni taqdim etishingiz mumkin, ammo bu kamdan-kam hollarda bo'ladi. Indeksatorlar odatda ma'lumotlar maydonlariga kirish uchun API-ni belgilaydilar va ma'lumotlar maydonlarini interfeysda aniqlab bo'lmaydi.
Interfeys uchun indeksator yordamchisining namunasi quyida keltirilgan:
C # da ko‘rinishi
public interface ISomeInterface
{
//...
// Indexer declaration:
string this[int index]
{
get;
set;
}
}
Indeksatorning imzosi bir xil interfeysda e'lon qilingan boshqa indeksatorlarning imzolaridan farq qilishi kerak.

Misol.Quyidagi misol interfeys indeksatorlarining bajarilishini namoyish etadi.


C #
// Indexer on an interface:
public interface IIndexInterface
{
// Indexer declaration:
int this[int index]
{
get;
set;
}
}


// Implementing the interface.
class IndexerClass : IIndexInterface
{
private int[] arr = new int[100];
public int this[int index] // indexer declaration
{
// The arr object will throw IndexOutOfRange exception.
get => arr[index];
set => arr[index] = value;
}
}
C #Nusxalash
IndexerClass test = new IndexerClass();
System.Random rand = new System.Random();
// Call the indexer to initialize its elements.
for (int i = 0; i < 10; i++)
{
test[i] = rand.Next();
}
for (int i = 0; i < 10; i++)
{
System.Console.WriteLine($"Element #{i} = {test[i]}");
}


/* Sample output:
/* Sample output:
Element #0 = 360877544
Element #1 = 327058047
Element #2 = 1913480832
Element #3 = 1519039937
Element #4 = 601472233
Element #5 = 323352310
Element #6 = 1422639981
Element #7 = 1797892494
Element #8 = 875761049
Element #9 = 393083859
*/
Yuqoridagi misolda interfeys a'zosining to'liq malakali nomidan foydalanib, interfeys a'zosini aniq amalga oshirishingiz mumkin. Misol
C # ko‘rinishi
string IIndexInterface.this[int index]
{
}
Shu bilan birga, to'liq malakali ism, agar sinf bir xil indeksator imzosiga ega bo'lgan bir nechta interfeysni amalga oshirsa, demambigatsiya maqsadlari uchun talab qilinadi. Masalan, agar sinf ikkita interfeysni amalga oshirsa ( va ), ikkalasi ham bir xil imzo indeksator interfeysi a'zosiga ega bo'lsa, aniq bajarishni talab qiladi. Bu shuni anglatadiki, quyidagi indeksator deklaratsiyasi talab qilinadi:
EmployeeICitizenIEmployee
C # ko‘rinishi
string IEmployee.this[int index]
{
}
indeksatorni interfeysda amalga oshiradi IEmployee, shu bilan birga quyidagi deklaratsiya:
C # ko‘rinishi
string ICitizen.this[int index]
{
}
interfeysda indeksatorni amalga oshiradi  ICitizen.

Download 0.67 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   18




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