Indeksatorlar va xossalar


Download 20.68 Kb.
bet1/2
Sana27.01.2023
Hajmi20.68 Kb.
#1133464
  1   2
Bog'liq
Индексаторлар ва хоссалар


INDEKSATORLAR VA XOSSALAR
Dasturchilar standart satrlarda mavjud bo'lgan individual elementlarga indeks([]) operatsiyasi orqali kirish jarayoni bilan tanishadilar. C # da indeksatorni aniqlash orqali standart massiv kabi indekslanishi mumkin bo'lgan maxsus sinflar va strukturalarni loyihalash mumkin. Maxsus to'plam turlarini (umumlashgan va umumlashmagan) yaratish uchun ushbu o'ziga xos til vositasi eng foydalidir. Indeksatorlar bir yoki ko'p o'lchovli bo'lishi mumkin.
Bir o`lchovli indeksatorlar
Quyida bir o`lchovli indeksatorning umumiy ko`rinishi keltirilgan:

element_turi this[int indeks] {


// ma`lumotlarni olish uchun aksessor,
get {
// indeks aniqlagan qiymatni qaytarish.
}
// ma`lumotlarni o`rnatish uchun aksessor,
set {
// indeks aniqlagan qiymatni o`rnatish.
}}
bu erda element_turi indeksator elementining turini bildiradi. Shuning uchun indeksator orqali kirish mumkin bo'lgan har bir elementning aniq element_turi bo'lishi kerak. Ushbu tur massiv elementning turiga mos keladi. ndeks parametri murojaat mumkin bo`lgan elementning konkret indeksini oladi. Formal ravishda, ushbu parametr umuman int turiga ega bo'lishi shart emas, lekin indeksatorlar odatda indekslangan massivlar uchun ishlatilganligi sababli, ushbu parametrning ko'pincha butun turi ishlatiladi.
Indeksatorning tanasida ikkita aksessor(ya'ni, ma'lumotlarga murojaat) aniqlangan: get va set . Aksessor usulga o'xshaydi, bundan tashqari unda qaytish turi yoki parametrlari e'lon qilmaydi.
Indeksatorni ishlatganda aksessorы avtomatik ravishda chaqiriladi va ikkalasi indeksni parametr sifatida oladi. Shunday qilib, agar indeksator tayinlash operatorining chap tomonida ko'rsatilgan bo'lsa, u holda set aksessori chaqiriladi va indeks parametri bilan ko'rsatilgan element o'rnatiladi. Aks holda, get accessor chaqiriladi va indeks parametriga mos keladigan qiymat qaytariladi. Bundan tashqari, accessor belgilangan indeksda berilishi kerak bo'lgan qiymatni o'z ichiga olgan yashirin value parametrini oladi. Masalan, quyidagi misol keltirilgan:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1


{
class MyArr
{
int[] arr;
public int Length;

public MyArr(int Size)


{
arr = new int[Size];
Length = Size;
}

// Oddiy indeksatorni yaratish


public int this[int index]
{
set
{
arr[index] = value;
}

get
{


return arr[index];
}
}
}

class Program


{
static void Main()
{
MyArr arr1 = new MyArr(Size: 5);
Random ran = new Random();
// arr1 sinifining har bir nusqasini initsializatsiyalash
for (int i = 0; i < arr1.Length; i++)
{
arr1[i] = ran.Next(1,100);
Console.Write("{0}\t", arr1[i]);
}

Console.ReadLine();


}
}
}
Joriy sinf MyArr, indeksatorni aniqlaydi, bu chaqirishga sonli qiymatlardan foydalangan holda qism elementlarni aniqlashga imkon beradi. Biroq, bu indeksator usulining majburiy talabi emasligini tushunish kerak.
Shuni ta'kidlash kerakki, indeksator umuman massivda ishlashi shart emas. Uning asosiy maqsadi - foydalanuvchini massivga o'xshash funktsiyalar bilan ta'minlash.

Indeksatorlardan foydalanishda ikkita muhim cheklov mavjud. Birinchidan, indeksator tomonidan qaytarilgan qiymatni usulga ref yoki out parametr sifatida o'tkazib bo'lmaydi, chunki indeksator uni saqlash uchun xotira joyini aniqlamaydi. Ikkinchidan, indeksator o'z sinfining a'zosi bo'lishi kerak va shuning uchun statik deb e'lon qilinishi mumkin emas.



Download 20.68 Kb.

Do'stlaringiz bilan baham:
  1   2




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