Indexers

არის შემთხვევა როდესაც კლასის შიგნით გამოცხადებულია მასივი და მასთან მიმართვა ხდება კლასს გარედან  მასივის წევრის რიგითი ნომრის (ინდექსის) გადაცემით. კლასის გარედან მასივზე მისამართად შეიძლება გამოვიყენოთ
ფუნქციები, ერთი ფუნქციაა მასივის რიგითი წევრისთვის მნიშვნელობის მინიჭებისთვის, ხოლო მეორე მასივის წევრის მნიშვნელობის დასაბრუნებლად.

ჩვენს შემთხვევაში პირველი ეს არის SetElement ფუნქცია ხოლო მეორე GetElement,
იმისთვის რათა SetElement–მა კლასის შიგნით გამოცხადებულ ფუნციას გადასცეს მნიშვნელობა საჭიროა მას ჰქონდეს ორი პარამეტრი ერთი მასივის წევრის ინდექსისთვის ხოლო მეორე მნიშვნელობისათვის (int index, int content),
რაც შეეხება დასაბრუნებელ მეთოდს GetElement–ს მისთვის საკმარისია ერთი პარამეტრი (index). კლასთან მიმართვის მაგალითი მოცემულია შემდეგნაირად:

for(int i = 0; i < list.Count; i++) {
list.SetElement(i, r.Next(100));
Console.WriteLine(list.GetElement(i));
}

მაგრამ იგივე შეიძლება მარტივად ასე გაკეთდეს

for(int i = 0; i < list.Count; i++) {
list[i] = r.Next(100);
Console.WriteLine(list[i]);
}

ანუ ამ შემთხვევაში კლასის ობიექტს მიუთითებთ ინდექსს. როგორც ჩანს ამ ჯერზეც იგივე შედეგს ვიღებთ მაგრამ გაცილებით მარტივი და მოხერხებული მეთოდით, რაც მიიღწევა ფუნქციით რომელსაც ინდექსერი ეწოდება.

ასეთ ფუნქციით კლასის გარედან მასივის წევრებზე მიმართვა ხდება კლასის ობიექტზე ინდექსის ნიწერით. მოდი ვნახოთ რას წარმოადგენს ინდექსერი
კლასის შიგნით. პირველრიგში რითაც ინდექსერი განსხვავდება ჩვეულებრივი
მეთოდისგან ეს არის ის რომ ინდექსერს არ აქვს სახელი და აქედან გამომდინარე კლასის შიგნით შეიძლება იყოს მხოლოდ ერთი ან რამდენიმე დატვირთვით (ოვერლოუდებით). პარმეტრებზე კონტროლი ხდება get და set ით
როგორც პროპერთების შემთხვევაში

Advertisements
This entry was posted in C# Programming. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s