онда біздің класс IEnumerable (тізімдеулі, перечислимый) интерфейсінің
мұрагері болуы керек. Осы интерфейстің бір ғана GetEnumerator()
әдісі
болады және осы әдіс Enumerator
(тізімдеуші, перечислитель) типіндегі
объекті қайтарады. GetEnumerator() әдісінің жазылу пішімі келесі түрде
болады:
IEnumerator GetEnumerator();
Сонымен, осы клас IEnumerable және IEnumerator интерфейстерінің
мұрагері болуы керек.
IEnumerator интерфейсінің тізімделген
кезекті объекті қайтаратын
Object Current{get;} деген бір қасиеті және екі әдісі болады. Bool MoveNext()
әдісі тізімдеушіні келесі тізімделген объектке жылжытады, void Reset() әдісі
тізімдеушіні бірінші тізімделген объектке орнатады.
Жоғарыда келтірілген қасиет пен екі әдіс Foreach циклінің кӛмегімен
массив объекттерін қарап шығу процессін ұйымдастыруға мүмкіндік береді.
Осы интерфейстердің әдістері виртуалды коллекциямен жұмыс жасайды
және осы жағдай олардың әмбебаптығын анықтайды.
Егер класта объекттерді салыстыру керек болса, мысалы, объекттерді
сұрыптау керек болса, онда ондай класты IComparable интерфейсінің
мұрагері етіп жариялау керек. Осы интерфейстің бір ғана әдісі болады -
CompareTo(object obj), ол әдіс "үлкен", "кіші" немесе "тең" қатынастарының
орындалуына байланысты оң, теріс немесе нӛлге тең бүтін санды қайтарады.
IEnumerable және IEnumerator интерфейстерімен
жұмыс жасауды
қарастырайық. Осы мысал бойынша дүкендегі тауарларды қарап шығуды
ұйымдастыру керек. Tovar класының екі ӛрісі болады – тауардың атауы және
оның бағасы.
class Tovar
{
public string Naz; //
Тауардың атауы мен бағасы
public
int Cena;
public Tovar(string n, int c) // Конструкор
{
Naz = n; Cena = c;
}
}
Tovar типіндегі объекттерді сақтау үшін Cklad класын қолданамыз,
құрылымы мынандай:
class Cklad
{
public Tovar[] tovar; // тауарлар массиві
public Cklad() // қойма конструкторы
{
tovar = new Tovar[4];
}
}
Қоймада сақтауға болатын объекттердің максималь саны 4-ке тең.
Қосымшада IEnumerable интерфейсін қолданбаймыз.
Form1.cs файлының коды:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public
static string s;
public static int kol;
class Tovar
{
public string Naz; // Тауардың атауы мен бағасы
public int Cena;
public Tovar(string n, int c) // Конструкор
{Naz = n; Cena = c;
}
}
class Cklad
{
public Tovar[] tovar; // Тауар бойынша массив
public Cklad() // қойма конструкторы
{
tovar = new Tovar[4];
}
}
public Form1()
{ InitializeComponent();
kol = 0;
s = "";
}
Cklad ckl = new Cklad();
private void button2_Click(object sender, EventArgs e)
{
if (kol < 4)
{
ckl.tovar[kol] = new Tovar(textBox1.Text,
Convert.ToInt32(textBox2.Text));
s = s + textBox1.Text + textBox2.Text + "\r\n";
}
else { s = s + "Қойма толды" + "\r\n"; kol--; }
kol++;
textBox3.Text = s;
}
private void button1_Click(object sender, EventArgs e)
{
s = "";
s = "foreach циклінің жұмысы" + "\r\n";
foreach (Tovar t in ckl.tovar)
{
}
,
онда, компилятор қосымшада кеткен
қателік туралы хабарлама
шығарады:
«
foreach statement cannot operate on variables of type '
WindowsFormsApplication1.Form1.Cklad ' because 'Books' does not
contain a public definition for 'GetEnumerator'»
(
Достарыңызбен бөлісу: