Foreach_and_IEnumerable

ვქმნით კლასს რომელიც შეიცავს სტრინგის ტიპის მასივს. foreach ოპერატორის რეალიზაციისთვის საჭიროა კლასი TempList იყოს მიმკვიდრეობით დაკავშირებული IEnumerable ინტერფეისთან, ხოლო IEnumerable  ინტერფეისი თავისთავად მოითხოვს GetEnumerator() ფუნქციას. თავისთავად GetEnumerator() ფუნქცია   აბრუნებს IEnumerator ინტერფეისის ტიპის პარამეტრს და შესაბამისად საჭიროა კლასი რომელიც მემკვიდრეობით  IEnumerator ინტერფეისთან იქნება დაკავშირებული.

using System;
using System.Collections;
using System.Linq;
using System.Text;

namespace foreach_and_IEnumerable {
class TempList : IEnumerable {
private string[] _arrayList = { "erti", "ori", "sami", "orxi", "xuti", "eqvsi", "shvidi" };

#region IEnumerable Members

public IEnumerator GetEnumerator() {
MyEnumerator myen = new MyEnumerator(_arrayList);
return myen;
}
}
#endregion

class MyEnumerator : IEnumerator {
//MyEnumerator კლასი ახდენს IEnumerator–ის ფუნქციების რეალიზებას.
private string[] _arr;
private int _index = -1;

public MyEnumerator(string[] array) {//კონსტრუქტორი იღებს სტრინგების მასივს და უტოლებს _arr–ის
_arr = array;//           პოინტერს ხოლო ინდექსს ანიჭებს საწყის მნიშვნელობას
_index = -1;
}

public object Current {//Current აქსესორი მასივიდან იღებს და გვაწვდის მიმდინარე ელემენტის მნიშვნელობას
get { return _arr[_index]; }
}

public bool MoveNext() {//MoveNext() ფუნქცია ამოწმებს ინდექსის სიდიდეს, რომ არ გადააჭარბოს მასივის სიდიდეს
if(_index + 1 < _arr.Length) {
_index++;// იმ შემთხვევაში თუ (_index + 1)–ის მნიშვნელობა ნაკლებია _arr.Length–ზე ინდექსს გაზრდის ერთით
return true;//და დააბრუნებს true(მასივის შემდეგი ინდექსის ელემენტი არსებობს)
} else {
return false;//ხოლო თუ არ არის შემდეგი ინდექსის ელემენტი დააბრუნებს false–ს.
}
}

public void Reset() {
_index = -1;
}                                                                                                                            }                                                                                                            }


* This source code was highlighted with Source Code Highlighter.

QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE

using System;
using System.Collections;
using System.Linq;
using System.Text;

namespace foreach_and_IEnumerable {
class Program {
static void Main(string[] args) {
TempList mylist = new TempList();
//მოცემული კლასიდან თვითოეული ელემენტის გადამოწმება შეიძლება while ციკლით შემდეგნაირად

IEnumerator ar = mylist.GetEnumerator();
while(ar.MoveNext()) {
Console.WriteLine(ar.Current);
}
Console.WriteLine("\n-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%\n");
//იგივე შეგვეძლო ასეც გაგვეკეთებინა
foreach(var item in mylist) {
Console.WriteLine(item);
}
//ცხადია foreach ოპერატორი გაცილებით მოხერხებულია
Console.Read();

}
}
}

* This source code was highlighted with Source Code Highlighter.

–––> download source <–––

external link1

external link2

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